-
2009年05月06日
wstat macro - [札记]
在进程间通信时,经常使用wait(int* status)或waitpid(pid_t pid, int* status, int options)来等待子进程中断或结束。其中status这个参数标识子进程的结束状态。我们可以通过wstat宏来对其进行判断。
#include <sys/wait.h>
/* int status */
WIFEXITED(status) /* 如果子进程正常结束则为非0值 */
WEXITSTATUS(status) /* 取得子进程由exit()返回的结束代码,一般会先用WIFEXITED来判断是否正常结束才能使用这个宏 */
WIFSINGNALED(status) /* 如果子进程是因为信号而结束,则这个宏值为真 */
WTERMSIG(status) /* 取得子进程因信号而中止的信号代码,一般会先用WIFSINGNALED来判断后才使用这个宏 */
WIFSTOPPED(status) /* 如果子进程处于暂停执行情况,则这个宏值为真。一般只有使用WUNTRACED时才会有这种情况 */
WSTOPSIG(status) /* 取得引发子进程暂停的信号代码,一般会先用WIFSTOPPED来判断后才使用这个宏 */
WIFCONTINUED(status) /* 如果状态是表示子进程继续执行则返回非0 */
WCOREDUMP(status) /* 如果已经生成了一个核心(core)转储文件,则返回真 */