0

sa_sigaction 函数采用参数 siginfo_t,它根据子进程状态的变化而保存“si_code”和“si_status”。我正在使用一个库函数,该函数将一个整数作为状态整数,您可以将其传递给 WIFEXITED、WIFTERMINATED、WIFSTOPPED 等函数。

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

问候,丹尼尔。

4

1 回答 1

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 */
}

但是,您仍然需要显式等待子进程才能从进程表中获取进程。

于 2013-06-11T21:57:59.310 回答