sa_sigaction函数接受参数siginfo_t,该参数保存“si_code”和“si_status”,具体取决于更改子进程的状态。 我正在使用一个库函数,它取一个整数作为状态整数,你可以传递给WIFEXITED,WIFTERMINATED,WIFSTOPPED等函数。
有没有办法从siginfo_t结构中派生这个整数?
此致 Danyel。
答案 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 */
}
但是,您仍需要明确地等待子进程从进程表中获取进程。