スクリプトでbash
次のように信号を待つ簡単な方法はありますか?
wait -s SIGINT
どんな関係ですか?おそらくただtrap
?
答え1
いいえ。
wait
特に、親プロセスが子プロセスの終了を待ち、その終了状態にアクセスするために使用されます。
さらに、どのプロセスも信号をキャプチャできませんKILL
(たとえば、使用された元の質問KILL
)。
また、「信号を待つ」とは、信号が非同期イベントであるため珍しいものです。待つ代わりに、シグナルハンドラ(trap
シェルで使用)をインストールしてシグナルを処理します。いつでも到着しました。シグナルはスクリプトの実行中いつでも到着する可能性があり、これが発生するとシグナルハンドラが実行されます(信号の処理中に通常のプログラムフローが一時的に中断されます)。
明らかに、あなたは次のことをすることができます
trap 'quit=1' USR1
quit=0
while [ "$quit" -ne 1 ]; do
printf 'Do "kill -USR1 %d" to exit this loop after the sleep\n' "$$"
sleep 1
done
echo The USR1 signal has now been caught and handled
一種の「信号到着待機」ループを実行します。
ここで「トラップ」は信号を「つかみ」「USR1
ハンドラ」が設定され、quit
制御1
がコードに戻され、ループを終了します。