信号处理:如何解析代码和状态,以便WIFEXITED等可以使用它们?

时间:2013-06-11 21:52:42

标签: c signals children

sa_sigaction函数接受参数siginfo_t,该参数保存“si_code”和“si_status”,具体取决于更改子进程的状态。 我正在使用一个库函数,它取一个整数作为状态整数,你可以传递给WIFEXITED,WIFTERMINATED,WIFSTOPPED等函数。

有没有办法从siginfo_t结构中派生这个整数?

此致 Danyel。

1 个答案:

答案 0 :(得分:2)

我假设您有SIGCHLD的信号处理程序,这意味着子进程已经死亡。然后,信号处理程序可以使用waitpid()来获得退出状态。

pid_t pid;
int status;
while ((pid = waitpid(-1, &status, WNOHANG)) > 0) {
    /* use appropriate macros to check status */
}

如果您使用SA_SIGINFO,则sa_sigaction回调的第二个参数具有退出状态:

if (info->si_code == CLD_EXITED) {
    /* info->si_status is the exit status */
}

但是,您仍需要明确地等待子进程从进程表中获取进程。