【发布时间】:2013-08-26 10:41:14
【问题描述】:
SIGCHLD 信号被发送到子进程的父进程时 退出,被打断,或被打断后继续。
这是否意味着当父进程向子进程发送任何信号(例如SIGTERM)时,它又会收到子进程返回的SIGCHLD?
还是我误解了中断(我认为它的意思是收到任何信号),在这种情况下,涉及哪些信号?
【问题讨论】:
SIGCHLD 信号被发送到子进程的父进程时 退出,被打断,或被打断后继续。
这是否意味着当父进程向子进程发送任何信号(例如SIGTERM)时,它又会收到子进程返回的SIGCHLD?
还是我误解了中断(我认为它的意思是收到任何信号),在这种情况下,涉及哪些信号?
【问题讨论】:
在这些情况下,一个 SIGCHLD 会传递给父级:
我认为 SIGSTOP/SIGCONT 是维基百科所说的“中断”。
SIGTERM 的默认处理程序是终止进程。因此,如果父进程向终止该子进程的子进程发送 SIGTERM,那么是的 - 父进程将收到一个 SIGCHLD。
如果子进程安装了一个不终止它的信号处理程序,则不会有 SIGCHLD 信号传递给父进程。
【讨论】:
SIGTERM 是个坏例子。当我将SIGTERM 发送给我的子进程时,它们将捕获信号并在退出前执行一些清理;只有SIGKILL 会立即终止它们。那么我是否应该理解如果SIGTERM 被孩子抓住了,SIGCHLD 不会发送给父母?
SIGCHLD。 Wikipedia 页面说当进程中断时它也会被调度:这是什么意思?
SIGSTOP 和 SIGCONT 是发送 SIGCHLD 的另外两个可能原因。谢谢!