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

当我们在命令行使用ctrl+c中断程序的执行的时候,这个正在执行的进程就会接受到SIGINT信号,根据上文这个信号对应的数值为2,因此程序的退出码等于130(128 + 2) 。

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

文章插图
下面是一个通过kill命令发送对应的信号的例子:
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语言实现获取子进程退出时候的退出状态码 。

经验总结扩展阅读