Bash:在不使用组 ID 的情况下杀死进程和所有子进程

Bash:在不使用组 ID 的情况下杀死进程和所有子进程

TL;DR,我需要一种方法来杀死进程和所有后代进程,而不杀死具有相同组 ID 的兄弟进程,不在终端中打印输出,并且使用非零退出代码。

我有一个 bash 脚本,它生成子进程,子进程生成孙子进程和曾孙进程。

我想杀死一个特定的孩子及其所有后代,而不使用 sudo。

以下是我尝试过的一些解决方案,但对我来说不起作用:

  1. 通过组 ID 进行杀戮。孩子可能有具有相同组 ID 的兄弟进程,我不想杀死它。

  2. 使用kill $childpid。这并没有杀死所有孙子进程和曾孙进程

  3. 使用kill -9 $childpid。这会导致我运行脚本的终端中出现文本输出,这并不理想,即使脚本和 Kill 命令都将其 stdout 和 stderr 路由到不同的文件

  4. 使用pkill -P $childpid。这似乎一开始就是我想要的,但是子进程退出时退出代码为零。父进程需要知道它的子进程被提前杀死,所以我需要它以 0 以外的代码退出

做这个的最好方式是什么?

编辑:我的帖子已被标记为可能重复,但这些链接中的所有解决方案都有我在帖子中描述的问题之一

相关内容