gpt4 book ai didi

c - 子进程会在 abort() 上发送 SIGCHLD 吗?

转载 作者:太空狗 更新时间:2023-10-29 11:40:02 25 4
gpt4 key购买 nike

如果应用程序执行 fork() 并且子进程因 abort() 而死(由于 assert() 失败) , 父进程会收到一个 SIGCHLD 吗?

如果相关,这是在 Debian 4(gcc 版本 4.1.2)上。

最佳答案

如果你想检查相同的内容,请编写一个示例代码,它 fork 一个 child ,然后 child 调用 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 发行版上是这样。

关于c - 子进程会在 abort() 上发送 SIGCHLD 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3837853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com