创建子进程并立即退出(_exit())后,我想执行等待并检查状态。现在我想知道如果在if / else构造的'else'分支中我还需要检查WIFSIGNALED。据我了解,如果我执行等待,a)错误可能发生(-1),孩子可能已经正常终止(exit()或_exit()),或者它可能已被一个终止信号,所以检查可以省略,对吗?
//remainder omitted
int status;
pid_t t_pid = wait(&status);
if (t_pid == -1) {
perror("wait");
exit(EXIT_FAILURE);
}
if (WIFEXITED(status)) {
printf("child terminated normally, status = %d\n",
WEXITSTATUS(status)
);
} else { // <-- do it have to check for WIFSIGNALED() here?
printf("child was terminated by a signal, signum = %d\n",
WTERMSIG(status)
);
}
答案 0 :(得分:1)
我不知道。
但你可以让你的孩子“异常”死去。在孩子身上杀死(getpid())?
从文档中的单词的声音我会说你正确地做到了。
答案 1 :(得分:1)
是的,您是对的 - 如果wait
成功,那么WIFEXITED()
或WIFSIGNALED()
将为真。
答案 2 :(得分:1)