我从 bash 脚本启动两个子进程,并使用wait
命令等待两个子进程完成:
./proc1 &
pid1=$!
echo "started proc1: ${pid1}"
./proc2 &
pid2=$!
echo "started proc2: ${pid2}"
echo -n "working..."
wait $pid1 $pid2
echo " done"
该脚本在正常情况下工作正常:它正在等待两个进程完成并在完成后退出。但有时我需要停止这个脚本(使用Ctrl+C
)。但是当我停止它时,子进程不会被中断。我怎样才能用主脚本完全杀死它们?
答案1
设置处理 SIGINT 的陷阱 (Ctrl+C)。在你的情况下,会是这样的:
trap "kill -2 $pid1 $pid2" SIGINT
只需将其放在 wait 命令之前即可。