如何杀死以特定进程为根的进程树中的所有(子)进程,而不是进程本身?

如何杀死以特定进程为根的进程树中的所有(子)进程,而不是进程本身?

我有一个python进程,它生成一个git( git clone) 子进程,该子进程又生成几个子进程本身。在这里,我想杀死以 为根的进程树中的所有进程git,而不杀死进程python

可能的解决方案(但有警告):

  • python递归地遍历子进程树/proc/<pid>

在这种情况下,我如何确定此进程层次结构中的任何进程在被杀死之前都没有生成子进程,在这种情况下,子进程将成为孤儿进程(竞争条件)?

  • 杀死该进程的进程组python,其中包括git所有其他后代。

在这种情况下,python进程也会被终止,这是我不希望发生的。

有没有办法可靠地杀死以进程为根的进程层次结构中的所有进程python,而不是python进程本身?

答案1

pslist软件包包含rkill可以杀死所有后代的命令:

人 plist:

pslist 实用程序检查当前进程列表以查找指定进程及其所有后代。 [..]

当作为 rkill 调用时,该实用程序不会显示有关进程的信息,而是向它们发送一个信号。如果未在命令行上指定,则会发送终止 (SIGTERM) 信号。

你只需要给它 git 的 pid 即可。

(可在 ubuntu/arch/等上使用)

相关内容