0

私のWeb開発ワークフローには、次の2つのプロセスがあります。

  1. フォルダの変更を監視しています
  2. ブラウザで自分のサイトをプレビューする

それらを実行し、後で両方を同時に停止できるようにしたいと思います。アンパサンド演算子の使用を提案している人を見てきました。

process_1 & process_2

しかし、押すCtrl + Cと2番目のものだけが停止します。私はkill最初のものを手動でしなければなりません。このアプローチには何が欠けていますか?

4

2 に答える 2

2

SIGINTに応答して、フォアグラウンドスクリプトでサブプロセスを明示的に強制終了することができます。

#!/bin/sh
trap 'kill $pid1 $pid2' 2
cmd1 &
pid1=$!
cmd2 &
pid2=$!
wait

この例には競合状態があります。割り当てられるSIGINT前に親に送信すると、警告メッセージが送信され、どちらの子も終了しません。が割り当てられる前に送信した場合、実行中のプロセスのみにシグナルが送信されます。いずれの場合も、親は実行を継続し、1秒を送信できます。一部のバージョンでは、を使用してプロセスグループに信号を送信することでこの競合状態を回避できますが、すべてのバージョンがその使用法をサポートしているわけではありません。(いずれかの子プロセスがシグナルに応答して終了しない場合、親は終了せずに待機を継続することに注意してください。)pid1killSIGINTpid2cmd1SIGINTkillkill -$$kill

于 2012-10-30T03:40:56.297 に答える
2

2つのスクリプトを書いてみてください。1つには次のものが含まれています。

./process_1 &
./process_2 &

と2番目の

killall process_1
killall process_2

最初のスクリプトを実行して両方のプロセスを開始し、2番目のスクリプトを実行してプロセスを終了します。

于 2012-10-30T01:05:35.123 に答える