Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我在 Linux 上有一个通过 fork 启动 20 个子进程的进程。当我杀死父进程时,它通常会杀死所有的子进程,但有时它不会杀死所有的子进程,我会留下一些孤立的进程。这不是启动时的竞争条件,这是在进程处于活动状态几分钟之后。
什么样的事情会导致 SIGTERM 无法正确传播到某些子进程?
进程树中的子进程不会自动传播信号(SIGTERM 或其他)。
由于可以观察到杀死父进程会导致一些子进程退出,这是由于辅助效应 - 例如SIGPIPE当子进程尝试读取或写入管道时,另一侧的父进程已死亡。
SIGPIPE
如果您想确保在您的进程收到 a 时清理孩子SIGTERM,请安装一个信号处理程序并自己做。
SIGTERM
如果您在发送信号时使用进程组 ID (pgid),则该信号将传播到父进程及其所有子进程。
要了解 pgid,请使用ps a -o pgid,command.
ps a -o pgid,command