SIGCHLD 的默认配置与显式设置为 SIG_IGN 的配置有什么区别?

SIGCHLD 的默认配置与显式设置为 SIG_IGN 的配置有什么区别?

Linux 编程接口

26.3.1 建立 SIGCHLD 处理程序

每当父进程的一个子进程终止时,SIGCHLD 信号就会发送到父进程。默认情况下,这个信号被忽略,但我们可以通过以下方式捕获它安装信号处理程序。在信号处理程序中,我们可以使用 wait() (或类似的)来获取僵尸子进程。然而,这种方法有一个微妙之处需要考虑。

26.3.3 忽略死亡子进程

还有一种处理死亡子进程的可能性。将 SIGCHLD 显式设置为 SIG_IGN 会导致随后终止的任何子进程立即从系统中删除,而不是转换为僵尸进程。在这种情况下,由于子进程的状态被简单地丢弃,因此对 wait() (或类似)的后续调用无法返回终止子进程的任何信息。

请注意,即使 SIGCHLD 的默认配置 是可以忽略的, 显式地将处置设置为 SIG_IGN 导致此处描述的不同行为。在这方面,SIGCHLD 在信号中被独特地对待。

SIGCHLD 的默认配置与显式设置为 SIG_IGN 的配置有什么区别?

谢谢

答案1

将 SIGCHLD 的处置显式设置为 SIG_IGN 会导致随后终止的任何子进程立即从系统中删除,而不是转换为僵尸进程。

默认配置会导致子进程在退出时变成僵尸进程,直到检索到它们的退出状态。设置SIGCHLDSIG_IGN表示父级不在乎关于其子级的退出代码,它们在退出时立即收获。

相关内容