什么会导致 SIGTERM 不传播到子进程?

ste*_*918 4 linux fork sigterm

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

什么样的事情会导致 SIGTERM 无法正确传播到某些子进程?

Cha*_*ffy 6

没有信号(SIGTERM 或其他)自动传播到进程树中的子进程。

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

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