并行运行多个进程但在bash

时间:2016-02-26 19:24:05

标签: bash shell unix

我正在尝试创建一个运行多个长寿命脚本的bash脚本 - 这些脚本将在脚本结束时终止。例如:

x.sh:

while :; do sleep 10 && echo '10 seconds passed'; done

y.sh的pseduo代码:

./x.sh [anchored&]
./x.sh [anchored&]
./x.sh [anchored&]

然后在shell中,应该可以执行以下操作:

$ ./y.sh
# after 10 seconds
10 seconds passed
10 seconds passed
10 seconds passed
# after another 10 seconds
10 seconds passed
10 seconds passed
10 seconds passed
^[CTRL-C]
$ # all scripts are now canceled

在我的实际用例中,当然,我没有多次运行相同的脚本(x.sh),而是使用不同的命令。

2 个答案:

答案 0 :(得分:4)

这是您可以使用的快速解决方案。

trap
按下terminate时,

CTRL-C将执行函数pkill。该函数将对其父PID是发送信号PID的脚本的当前SIGINT的所有进程执行wait

脚本末尾的statement.executeUpdate()可确保脚本在子进程运行时保持运行。

答案 1 :(得分:1)

您可以将此脚本添加到脚本中,以确保杀死整个流程组:

trap "kill -- -$$" EXIT

否定脚本进程ID(-$$部分)会告诉kill杀死整个进程组。