在上一篇博客中提到进程等待时,用到了两个函数wait()函数和waitpid()函数;在这两个函数中都有这样一个整型参数status,这个参数的作用就是:获取子进程退出状态;
那么如何利用这个参数来得出子进程的退出状态?
首先,先来了解一下这个参数的结构:
(这个参数是一个整形参数,在获取出子进程退出状态时,只需要用到前16个比特位;)
通过上面这张图片可以知道:
- 参数status的低7位是用来表示被等待进程是正常退出还是异常退出(正常退出时低7位为全0,异常退出时低7位表示收到的中止信号);
- 参数status的低16位中的高8位用来表示被等待进程的退出码;
在Linux下,有两个宏,可以帮助我们分析子进程的退出状态:
WIFEXITED(status) :指出子进程是否为正常退出的。如果是正常退出,它会返回一个非零值;
WEXITSTATUS(status) :指出子进程退出时的退出状态。当WIFEXITED为非零的情况下,返回子进程的退出状态;当WIFEXITED(status)为0时,WEXITSTATUS(status)没有意义;
所以通过参数status可以得出子进程退出的详细信息;
举个例子
#include<stdio.h>
#include<sys/types.h>
#