ドキュメントによると:
シェルがSIGHUPシグナルを特定のジョブに送信しないようにするには、SIGHUPを受信しないようにマークされた組み込みまたはを使用してジョブテーブルから削除する必要があります。 disown-hを使用します。
https://www.gnu.org/software/bash/manual/html_node/Signals.html
引用符の[〜#〜]または[〜#〜]に注意してください。
-h
なしでdisown
を使用し、プロセスが終了しなかったことを再ログ記録するだけで確認できます。
#!/bin/bash
( sleep 10s; echo 1 > b ) &
disown
-h
オプションは必要ないようですか?それがなくても機能する場合、その目的は何ですか?
-h
がないと、ジョブはアクティブなジョブのテーブルから削除されますが、-h
がないと削除されません。
すべてがマニュアルにあります:
disown [-ar] [-h] [jobspec ...]
(...)
If the -h option is given, each jobspec is not removed
from the table, but is marked so that SIGHUP is not sent to the
job if the Shell receives a SIGHUP.
違いを確認するには、-h
の有無にかかわらず、ジョブの所有権を剥奪した後にjobs
を実行します。