Ctrl+C を使用して bash スクリプトの子プロセスを停止します。

Ctrl+C を使用して bash スクリプトの子プロセスを停止します。

bashスクリプトで2つのサブプロセスを起動し、次のwaitコマンドを使用して2つのサブプロセスが完了するのを待ちます。

./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コマンドの前に置くだけです。

関連情報