[英]Will a child process send SIGCHLD on abort()?
如果应用程序执行fork()
并且子进程死于abort()
(由于assert()
失败),那么父进程会收到SIGCHLD
吗?
如果相关,则在Debian 4(gcc版本4.1.2)上。
如果要进行相同的检查,请编写一个示例代码,该代码将派生一个子代,该子代将调用abort()(引发sigabrt信号)。 在strace上检查其输出。(strace可执行文件)
对于以下代码:
#include<stdio.h>
#include<unistd.h>
int main()
{
pid_t pid;
if(pid=fork()<0)
{
fprintf(stderr,"Error in forking");
}
else if(pid==0)
{
/*The child*/
abort();
}
else {
waitpid(pid,(int *)0,0);
}
return 0;
}
我得到以下输出:
--- SIGCHLD (Child exited) @ 0 (0) ---
gettid() = 4226
tgkill(4226, 4226, SIGABRT) = 0
--- SIGABRT (Aborted) @ 0 (0) ---
+++ killed by SIGABRT +++
因此答案是肯定的,至少在Ubuntu发行版上是这样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.