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

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

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

像这样的东西:

pkill -术语 -P

使用 PPID 会杀死孩子。但我已经阅读了一些有关 PGID 的零散内容,并且很想知道其中一种是否比另一种更有效。

答案1

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

使用 TERM 终止进程组会向进程组的所有成员发送 TERM 信号,因此这是可行的方法,但您应该确保父进程启动了一个进程组(或者父进程的父进程启动了一个进程组,而您没有这样做)不关心父母的父母是否可能收到 TERM 信号(如果它还活着)。

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

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

相关内容