次のスクリプトがあります。
#!/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
。