子进程会在 abort() 上发送 SIGCHLD 吗?
如果应用程序执行 fork()
并且子进程因 abort()
而死亡(由于 assert()
失败),父进程收到 SIGCHLD
?
如果相关的话,这是在 Debian 4(gcc 版本 4.1.2)上。
If an application does a fork()
and the child dies with an abort()
(due to failing an assert()
), will the parent process receive a SIGCHLD
?
If it's relevant this is on Debian 4 (gcc version 4.1.2).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您想检查相同的内容,请编写一个示例代码,该代码分叉一个子进程,并且该子进程调用 abort() (以引发 sigabrt 信号)。在 strace 上检查其输出。(strace 可执行文件)
对于以下代码:
我得到以下输出:
所以答案是肯定的,至少在 Ubuntu 发行版上是这样。
If you want to check the same,write a sample code which forks a child and the child calls abort() (To raise the sigabrt signal). Check its output on strace.(strace executable)
For the following code:
I get this output:
So the answer is yes, at least on Ubuntu distro.
您希望每当子进程终止时,父进程都会收到 SIGCHLD ,除非子进程已自行脱离来自父级(IIRC 使用setsid() 或setpgrp())。孩子这样做的主要原因是孩子正在启动守护进程。请参阅此处或此处可对守护进程进行更深入的处理。
You would expect the parent to get a SIGCHLD any time a child terminates unless the child has separated itself off from the parent (IIRC using setsid() or setpgrp()). The main reason for a child doing this is if the child is starting a daemon process. See Here or Here for a deeper treatment of daemon processes.