控制bash工作作为一个组?

有一种方法来控制给定的bash会话中的一组作业吗?

理想情况下,我想说的是:

 $ prog1 & $ GROUP=FOO prog2 & $ GROUP=FOO prog3 & $ GROUP=BAR prog4 & 

然后有例如kill %FOO只终止prog2prog3

有一种方法来控制给定的bash会话中的一组作业吗?

就在这里! – 使用数组来形成组,并使用$!捕获每个进程ID $! 并将其追加到数组中。

$! 是由POSIX指定的一个特殊参数 ,它给出了最近的后台命令的十进制进程ID。

下面是如何附加到Bash中的数组,并在您的问题的上下文中枚举它们的教程:

首先声明数组:

 $ GROUP_FOO=() $ GROUP_BAR=() 

不属于小组的工作:

 $ prog1 & 

进入FOO组的作业( +=符号表示应该将该值附加到数组中):

 $ prog2 & $ GROUP_FOO+=($!) 

FOO组另一份工作:

 $ prog3 & $ GROUP_FOO+=($!) 

工作进入BAR组:

 $ prog4 & $ GROUP_BAR+=($!) 

杀死FOO小组的过程:

 $ for id in ${GROUP_FOO[@]}; do kill $id; done 

脚本版本

如果我正在编写脚本,我会稍微修改一下,以便在成功启动时只将进程标识添加到数组中:

 prog2 & sleep 0.1; kill -0 $! && GROUP_FOO+=($!) 

这样你就不太可能在你的数组中有没有运行的进程ID,因为它们立即退出,出现错误。 0.1秒的睡眠延迟(可能甚至可能是0.01秒)使得处理时间以错误代码退出。