【发布时间】:2010-10-01 09:16:37
【问题描述】:
如果应用程序执行fork() 并且子进程以abort() 死亡(由于assert() 失败),父进程是否会收到SIGCHLD?
如果相关,这是在 Debian 4(gcc 版本 4.1.2)上。
【问题讨论】:
标签: c linux fork assert sigchld
如果应用程序执行fork() 并且子进程以abort() 死亡(由于assert() 失败),父进程是否会收到SIGCHLD?
如果相关,这是在 Debian 4(gcc 版本 4.1.2)上。
【问题讨论】:
标签: c linux fork assert sigchld
如果您想检查相同的内容,请编写一个示例代码,该代码派生一个孩子并且孩子调用 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 发行版上是这样。
【讨论】: