sa_sigaction 函数采用参数 siginfo_t,它根据子进程状态的变化而保存“si_code”和“si_status”。我正在使用一个库函数,该函数将一个整数作为状态整数,您可以将其传递给 WIFEXITED、WIFTERMINATED、WIFSTOPPED 等函数。
有没有办法从 siginfo_t 结构派生这个整数?
问候,丹尼尔。
我假设你有一个信号处理程序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 */
}
但是,您仍然需要显式等待子进程才能从进程表中获取进程。