首页 > 解决方案 > Bash:在不使用组 ID 的情况下杀死进程和所有子进程

问题描述

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

我想杀死一个特定的孩子,而且都是死者。

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

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

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

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

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

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

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

标签: bashprocess

解决方案


推荐阅读