有一种方法来控制给定的bash
会话中的一组作业吗?
理想情况下,我想说的是:
$ prog1 & $ GROUP=FOO prog2 & $ GROUP=FOO prog3 & $ GROUP=BAR prog4 &
然后有例如kill %FOO
只终止prog2
和prog3
。
有一种方法来控制给定的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秒)使得处理时间以错误代码退出。