【问题标题】:Is SIGCHLD dispatched on SIGTERM?SIGCHLD 是否在 SIGTERM 上发送?
【发布时间】:2013-08-26 10:41:14
【问题描述】:

Wikipedia page for SIGCHLD 说:

SIGCHLD 信号被发送到子进程的父进程时 退出,被打断,或被打断后继续。

这是否意味着当父进程向子进程发送任何信号(例如SIGTERM)时,它又会收到子进程返回的SIGCHLD

还是我误解了中断(我认为它的意思是收到任何信号),在这种情况下,涉及哪些信号?

【问题讨论】:

    标签: linux signals


    【解决方案1】:

    在这些情况下,一个 SIGCHLD 会传递给父级:

    • 子进程退出。
    • 子进程被 SIGSTOP、SIGTSTP、SIGTTIN 或 SIGTTOU 信号停止
    • 子进程由 SIGCONT 信号恢复

    我认为 SIGSTOP/SIGCONT 是维基百科所说的“中断”。

    SIGTERM 的默认处理程序是终止进程。因此,如果父进程向终止该子进程的子进程发送 SIGTERM,那么是的 - 父进程将收到一个 SIGCHLD。

    如果子进程安装了一个不终止它的信号处理程序,则不会有 SIGCHLD 信号传递给父进程。

    【讨论】:

    • 抱歉,SIGTERM 是个坏例子。当我将SIGTERM 发送给我的子进程时,它们将捕获信号并在退出前执行一些清理;只有SIGKILL 会立即终止它们。那么我是否应该理解如果SIGTERM 被孩子抓住了,SIGCHLD 不会发送给父母?
    • @Benjamin 当子进程终止时,出于任何原因,SIGCHLD 将传递给父进程。
    • 我明白了,我只是想弄清楚还有什么其他原因可能会触发SIGCHLD。 Wikipedia 页面说当进程中断时它也会被调度:这是什么意思?
    • 刚刚看到上面的更新,这说明了一切。 SIGSTOPSIGCONT 是发送 SIGCHLD 的另外两个可能原因。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    • 2019-11-29
    • 2010-11-16
    • 2016-08-12
    相关资源
    最近更新 更多