使用 Ctrl+C 从 bash 脚本中断子进程

使用 Ctrl+C 从 bash 脚本中断子进程

我从 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 命令之前即可。

相关内容