TL;DR,我需要一种方法来杀死进程和所有后代进程,而不杀死具有相同组 ID 的兄弟进程,不在终端中打印输出,并且使用非零退出代码。
我有一个 bash 脚本,它生成子进程,子进程生成孙子进程和曾孙进程。
我想杀死一个特定的孩子及其所有后代,而不使用 sudo。
以下是我尝试过的一些解决方案,但对我来说不起作用:
通过组 ID 进行杀戮。孩子可能有具有相同组 ID 的兄弟进程,我不想杀死它。
使用
kill $childpid
。这并没有杀死所有孙子进程和曾孙进程使用
kill -9 $childpid
。这会导致我运行脚本的终端中出现文本输出,这并不理想,即使脚本和 Kill 命令都将其 stdout 和 stderr 路由到不同的文件使用
pkill -P $childpid
。这似乎一开始就是我想要的,但是子进程退出时退出代码为零。父进程需要知道它的子进程被提前杀死,所以我需要它以 0 以外的代码退出
做这个的最好方式是什么?
编辑:我的帖子已被标记为可能重复,但这些链接中的所有解决方案都有我在帖子中描述的问题之一