我需要能够杀死在特定父进程下运行的所有子进程。这样做的更好选择是什么?使用 PPID 还是 PGID?
像这样的东西:
pkill -TERM -P
会使用 PPID 杀死孩子。但是我在这里和那里阅读了有关 PGID 的一些零碎内容,并且很想知道一个是否比另一个更好。
除非父进程捕获并重新发送信号,否则杀死父进程不会杀死子进程。
使用 TERM 杀死进程组会将 TERM 信号发送给进程组的所有成员,这样就可以了,但是您应该确保父进程启动了一个进程组(或者父进程的父进程启动了一个进程组,而您不这样做)如果它仍然活着,不关心父母的父母可能会收到 TERM 信号)。
如果您使用 shell 来启动父进程(或父进程的父进程),那么您不必担心这一点,因为 shell 中的每个命令调用都会启动一个进程组。
(有一个 Linux 特定功能可用于告诉内核在其父进程死亡时向子进程发送信号,但在您的标准 Unix 中,据我所知,这不会发生。查看prctl(2)并搜索如果您想了解更多关于 DEATHSIG 的信息)。
归档时间: |
|
查看次数: |
1104 次 |
最近记录: |