在 Ctrl+C 上从 bash 脚本中断子进程

g4s*_*4s8 6 linux bash process interrupt

我正在从 bash 脚本启动两个子进程并使用wait命令等待两者完成:

./proc1 &
pid1=$!
echo "started proc1: ${pid1}"

./proc2 &
pid2=$!
echo "started proc2: ${pid2}"

echo -n "working..."
wait $pid1 $pid2
echo " done"
Run Code Online (Sandbox Code Playgroud)

这个脚本在正常情况下工作正常:它等待两个进程完成并在它之后退出。但有时我需要停止这个脚本(使用Ctrl+C)。但是当我停止它时,子进程不会被中断。我怎样才能用主脚本完全杀死它们?

MAQ*_*MAQ 13

设置陷阱处理 SIGINT (Ctrl+C)。在你的情况下,这将是这样的:

trap "kill -2 $pid1 $pid2" SIGINT
Run Code Online (Sandbox Code Playgroud)

只需将它放在等待命令之前。