web-dev-qa-db-ja.com

組み込みオプション-hの否認に関するBashドキュメントの明確化

ドキュメントによると:

シェルが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オプションは必要ないようですか?それがなくても機能する場合、その目的は何ですか?

3
Zhro

-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を実行します。

5
jimmij