web-dev-qa-db-ja.com

Ctrl + Cでbashスクリプトから子プロセスを中断する

私はbashスクリプトから2つの子プロセスを開始し、waitコマンドを使用して両方の完了を待機しています。

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

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

echo -n "working..."
wait $pid1 $pid2
echo " done"

このスクリプトは、通常の場合は正常に機能しています。両方のプロセスが完了するのを待ってから終了します。ただし、このスクリプトを停止する必要がある場合があります(Ctrl+Cを使用)。しかし、それを停止しても、子プロセスは中断されません。どうすればメインスクリプトで完全に削除できますか?

6
g4s8

SIGINTを処理するトラップを設定します(Ctrl + C)。あなたの場合、それは次のようなものです:

trap "kill -2 $pid1 $pid2" SIGINT

待機コマンドの前に置いてください。

13
KWubbufetowicz