使用 PPID 或 PGID 杀死所有子进程是否更好/更可取?

use*_*029 3 linux process ps

我需要能够杀死在特定父进程下运行的所有子进程。这样做的更好选择是什么?使用 PPID 还是 PGID?

像这样的东西:

pkill -TERM -P

会使用 PPID 杀死孩子。但是我在这里和那里阅读了有关 PGID 的一些零碎内容,并且很想知道一个是否比另一个更好。

PSk*_*cik 6

除非父进程捕获并重新发送信号,否则杀死父进程不会杀死子进程。

使用 TERM 杀死进程组会将 TERM 信号发送给进程组的所有成员,这样就可以了,但是您应该确保父进程启动了一个进程组(或者父进程的父进程启动了一个进程组,而您不这样做)如果它仍然活着,不关心父母的父母可能会收到 TERM 信号)。

如果您使用 shell 来启动父进程(或父进程的父进程),那么您不必担心这一点,因为 shell 中的每个命令调用都会启动一个进程组。

(有一个 Linux 特定功能可用于告诉内核在其父进程死亡时向子进程发送信号,但在您的标准 Unix 中,据我所知,这不会发生。查看prctl(2)并搜索如果您想了解更多关于 DEATHSIG 的信息)。