Shell揭秘——程序退出状态码( 二 )


不在范围内不的退出码不在范围内(0-255)的退出码,需要和 0xff 进行 & 操作,得到的结果作为无符号数作为最终的程序的退出码!

Shell揭秘——程序退出状态码

文章插图
在上面的例子当中退出码256的二进制表示 1_0000_0000 他和 255(二进制表示为1111_1111)进行与操作得到的结果为1_0000_000,低8位等于0000_0000,因此最终的退出码等于0 。
Shell揭秘——程序退出状态码

文章插图
在上面的图当中-1的二进制表示等于1111_1111 因此最后得到的退出码等于1111_1111 = 255 。
C/Python语言获取进程退出的状态码#include <unistd.h>#include <sys/types.h>#include <sys/wait.h>#include <stdio.h>int main() {  if(fork() ==  0) {    _exit(1);  // 子进程执行  } else {    // 父进程执行    int status;    wait(&status);         // WEXITSTATUS 这个宏就是获取子进程退出时候的退出码    printf("status = %d\n", WEXITSTATUS(status));  }  return 0;}在上面的代码当中父进程执行的 wait 函数就是等待子进程的状态变化 , 当子进程退出的时候 wait 函数会返回 , 同时将子进程一些状态信息保存在 status 当中,然后我们就可以子进程传递给父进程最后的信息啦 。其中 WEXITSTATUS 这个宏就是获取子进程退出时候的退出码!对应的 python 实现如下图所示:
import osimport sysif __name__ == '__main__':    pid = os.fork()    if pid == 0:        sys.exit(-1)    else:        pid, status = os.wait()        print(os.WEXITSTATUS(status))总结【Shell揭秘——程序退出状态码】在本篇文章当中主要给大家介绍了一些常见的程序退出的状态码!并且给出一下例子帮助大家仔细理解,并且使用C语言和python语言实现获取子进程退出时候的退出状态码 。

推荐阅读