【Shell】複数プロセスをCtrl + Cで終了する
こんにちは、フリーランスエンジニアの太田雅昭です。
複数プロセス
開発には複数プロセスを並列起動することがよくあります。例えば以下のような具合です。
dart run build_runner watch & \
flutter run -d
上記では、コード生成と実行を並列処理しています。
ところが問題があります。上記実行した時、Ctrl + Cで終了すると、build_runnerが残ってしまいます。こうなると、プロセスを確認して終了する必要が出てきます。
トラップを仕込む
プロセスが終了せず残ってしまう問題を解決するため、以下のようにトラップを仕込みます。
trap 'kill 0' SIGINT; \
dart run build_runner watch & \
flutter run -d & \
wait
上記では、SIGINTが送信される(Ctrl + Cが押される)と、kill 0が実行されます。kill 0はプロセスグループのプロセスを全て終了します。これにより、安全に開発を進めることができます。