信号を待つ

信号を待つ

スクリプトで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がコードに戻され、ループを終了します。

関連情報