2016-02-26 84 views
0

我正在尝试创建一个运行多个长命令脚本的bash脚本 - 这些脚本都将以脚本结尾终止。例如:并行运行多个进程但在bash中一起退出

x.sh:

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

,然后在外壳,应该可以这样做::

$ ./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 
为y.sh

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

pseduo代码

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

+1

陷阱'SIGTERM'然后发送'SIGTERM'信号到所有后台进程。 – alvits

+0

我意识到你想要'CTRL-C'。这是'SIGINT'。 – alvits

回答

3

以下是您可以使用的快速解决方案。当按下CTRL-C

#!/bin/bash 
trap terminate SIGINT 
terminate(){ 
    pkill -SIGINT -P $$ 
    exit 
} 
#the rest of your code goes here 
./x.sh & 
./x.sh & 
wait 

trap将执行功能terminate。该函数将在所有进程上执行pkill,其所有进程的父代PID是发送信号SIGINT的脚本的当前PID

脚本末尾的wait可确保脚本在子进程正在运行时保持运行状态。