如果某个应用程序执行fork()
并且该孩子死于abort()
(由于assert()
失败),父进程是否会收到SIGCHLD
?
如果相关,则在Debian 4(gcc 4.1.2版)上。
答案 0 :(得分:4)
如果要检查相同内容,请编写一个示例代码,该代码会分叉子进程并且子进程调用abort()(以提高sigabrt信号)。检查它在strace上的输出。(strace executable)
以下代码:
#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发行版上。
答案 1 :(得分:1)