次のスクリプトがあります。
#!/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このスクリプトに信号を送信するにはどうすればよいですか(必ずしもそうである必要はありません)。
完璧です。誰かがそれを答えに変えたいと思っていますか?
—
Roger Lipscombe 2017
私はそれがそのように機能することを知っていますが、私よりも理由と理由を私よりも洞察力のある人に答えさせます。
—
Kusalananda
while true; do read; done最後に使用しました。それ以外の場合、テキストを入力するとテキストも終了します。Ctrl+ Cで終了します。
catプロセスが終了するとシグナルハンドラが実行されます。元のスクリプトを試し、を押しCtrl+Dてcatプロセスを終了します。一方でcat、プロセスがフォアグラウンドである、HUP信号が作用されていません。(シェル組み込み)にcat置き換えて再試行してくださいread。