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