wait() 之后检查状态
创建子进程并立即退出(_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)
);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我不知道。
但你可以让你的孩子“非正常”死亡。杀死(getpid())孩子?
http://publib.boulder.ibm.com/infocenter/tpfhelp/current/index.jsp?topic=/com.ibm.ztpf-ztpfdf.doc_put.cur/gtpc2/cpp_wifsignaled.html
从文档中单词的发音来看,我想说你做得正确。
I don't know.
But you could make your child die "abnormally". kill(getpid()) in the child?
http://publib.boulder.ibm.com/infocenter/tpfhelp/current/index.jsp?topic=/com.ibm.ztpf-ztpfdf.doc_put.cur/gtpc2/cpp_wifsignaled.html
From the sound of the words in the docs I'd say you are doing it correctly.
是的,您是对的 - 如果
wait
成功,则WIFEXITED()
或WIFSIGNALED()
将为 true。Yes, you are correct - if
wait
succeeded then eitherWIFEXITED()
orWIFSIGNALED()
will be true.是的。 POSIX.1 指出:
将 waitpid() 与 WUNTRACED 或 WCONTINUED 一起使用,可以得到WIFSTOPPED(*stat_loc) 或 WIFCONTINUED(*stat_loc) 为 true 的状态。
Yes. POSIX.1 states:
Using waitpid() with WUNTRACED or WCONTINUED, it is possible to get a status where WIFSTOPPED(*stat_loc) or WIFCONTINUED(*stat_loc) is true instead.