我有一个简单的bash脚本来运行给定数量的进程:
#!/bin/bash
# usage: ./run-abt.sh <agent count> <responder port> <publisher port>
echo "./abt-monitor 127.0.0.1 $2 $3 $1"
exec ./abt-monitor 127.0.0.1 $2 $3 $1 &
for (( i=1; i<=$1; i++ ))
do
echo "Running agent $i";
exec ./abt-agent 127.0.0.1 $2 $3 $i $1 > $i.txt &
done
我需要添加的是当用户按下Ctrl+C
并且控件返回bash时,run-abt.sh
创建的所有进程都会被杀死。
答案 0 :(得分:4)
将此行添加到脚本的开头:
trap 'kill $(jobs -p)' EXIT
当您的脚本收到来自Control-C的中断信号(或任何其他信号)时,它将在退出之前终止所有子进程。
在脚本结束时,在后台进程完成之前添加对wait
的调用,以便脚本本身自然退出),以便上面安装的信号处理程序有机会运行。也就是说,
for (( i=1; i<=$1; i++ ))
do
echo "Running agent $i";
exec ./abt-agent 127.0.0.1 $2 $3 $i $1 > $i.txt &
done
# There could be more code here. But just before the script would exit naturally,...
wait
答案 1 :(得分:2)
使用trap
内置:
trap handler_func SIGINT
但是,您必须分别存储和管理子进程的pid。