BashスクリプトにSIGHUPが表示されませんか?

BashスクリプトにSIGHUPが表示されませんか?

次のスクリプトがあります。

#!/bin/bash
echo "We are $$"
trap "echo HUP" SIGHUP
cat    # wait indefinitely

SIGHUP(使用)を送信するとkill -HUP pid何も起こりません。

スクリプトを少し変更すると、次のようになります。

#!/bin/bash
echo "We are $$"
trap "kill -- -$BASHPID" EXIT    # add this
trap "echo HUP" SIGHUP
cat    # wait indefinitely

...これにより、echo HUP終了時にスクリプトが正しく機能します(Ctrl + Cを押したとき)。

roger@roger-pc:~ $ ./hupper.sh 
We are 6233
^CHUP

どうなりますか?SIGHUPこのスクリプトにシグナルを送信するにはどうすればよいですか(必ずしもそうではありません)。

ベストアンサー1

バッシュマニュアル状態:

Bashがコマンドが完了するのを待ってトラップが確立されたことを知らせると、コマンドが完了するまでトラップは実行されません。

つまり、信号がbash送信されたときに信号が受信されても​​、SIGHUPのトラップはcat信号の終わりにのみ呼び出されます。

この動作が望ましくない場合は、bash組み込み関数(ループ内で+ read)を使用することも、バックグラウンドタスクを使用することもできます(参照)printfcatスティーブンの答え)。

おすすめ記事