我正在尝试创建一个运行多个长寿命脚本的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),而是使用不同的命令。
答案 0 :(得分:4)
这是您可以使用的快速解决方案。
trap
按下terminate
时, CTRL-C
将执行函数pkill
。该函数将对其父PID
是发送信号PID
的脚本的当前SIGINT
的所有进程执行wait
。
脚本末尾的statement.executeUpdate()
可确保脚本在子进程运行时保持运行。
答案 1 :(得分:1)
您可以将此脚本添加到脚本中,以确保杀死整个流程组:
trap "kill -- -$$" EXIT
否定脚本进程ID(-$$
部分)会告诉kill杀死整个进程组。