导致SIGTERM不传播到子进程的原因



我在Linux上有一个进程,它通过fork启动了20个子进程。当我杀死父进程时,它通常会杀死所有的子进程,但有时它不会杀死所有的,我只剩下一些孤立的进程。这不是启动时的竞争条件,这是在进程活动了几分钟之后。

什么样的事情会导致SIGTERM不能正确地传播到一些子进程?

流程树中没有自动向子级传播信号(SIGTERM或其他)。

由于可以观察到杀死父进程会导致一些子进程退出,这是由于辅助效应造成的,例如当子进程试图读取或写入另一侧已死亡的父进程的管道时会导致SIGPIPE

如果您想确保在您的进程接收到SIGTERM时清理子级,请安装一个信号处理程序并自己执行。

如果在发送信号时使用进程组id(pgid),则信号将传播到父进程及其所有子进程。

要了解pgid,请使用ps a -o pgid,command

最新更新