disown
シェルが終了したときに、シェルが不承認のジョブにSIGHUPを送信しないようにします。
破棄されたジョブをシェルのジョブコントロールから削除します。
最初は2番目の結果ですか?言い換えると、シェルから開始されたプロセスが何らかの方法でシェルのジョブ制御から削除された場合、シェルはシェルの終了時にSIGHUPをプロセスに送信しませんか?
disown -h
は、シェルのジョブ制御下でプロセスを維持します。それはdisown -h
プロセスがシェルから送信されたSIGHUPを引き続き受信するようにしますが、プロセスによるSIGHUPのアクションを「無視」するように設定しますか?これはNohup
に似ています。
$ sleep 123 & disown -h
[1] 26103
$ jobs
[1]+ Running sleep 123 &
$ fg 1
sleep 123
$ ^Z
[1]+ Stopped sleep 125
$ bg 1
[1]+ sleep 123 &
$ exit
$ ps aux | grep sleep
t 26103 0.0 0.0 14584 824 ? S 15:19 0:00 sleep 123
行う disown -h
とNohup
は、ターミナルを使用する際の違いを無視すると、実質的に同じように機能しますか?
ありがとう。
Nohup
とdisown -h
はまったく同じではありません // exactly .
disown
を使用すると、現在のインタラクティブシェルのジョブのリストからプロセスが削除されます。バックグラウンドプロセスの開始後にjobs
を実行し、disown
を実行しても、そのプロセスはシェルのジョブとして表示されません。否認されたジョブは、終了時にシェルからHUP
を受け取りません(ただし、最後の注を参照してください)。
disown -h
を使用すると、ジョブはジョブのリストから削除されませんが、シェルは終了した場合にHUP
信号を送信しません(ただし、最後の注を参照)。
Nohup
ユーティリティは、HUP
信号を無視して、指定されたユーティリティを起動します。ユーティリティはNohup
からシグナルマスクを継承するため、HUP
シグナルも無視します。シェルが終了すると、プロセスはNohup
の子プロセスとして残ります(Nohup
はinit
に親が変更されます)。
違いは、Nohup
で開始されたプロセスは、だれがシグナルを送信したかに関係なくHUP
を無視することです。取り消されたプロセスは、 sent HUP
signal by the Shell だけではありませんが、たとえば、 kill -s HUP <pid>
、これは無視されません。
HUP
は、以下の場合にのみシェルのジョブに送信されることに注意してください
huponexit
Shellオプションが設定されている、またはHUP
シグナルを受け取ります。bash
マニュアルからの関連ビット(私の強調):
信号
[...]
シェルはデフォルトで終了します
SIGHUP
]を受け取ると。対話型シェルは終了する前に、実行中または停止中のすべてのジョブにSIGHUP
を再送信します。停止したジョブは、SIGCONT
を確実に受け取るためにSIGHUP
に送信されます。シェルが特定のジョブに信号を送信しないようにするには、disown
ビルトイン(下記のShell BUILTIN COMMANDS
を参照)を使用してジョブテーブルから削除するか、disown -h
を使用してSIGHUP
を受信しないようにマークする必要があります。
huponexit
シェルオプションがshopt
で設定されている場合、bash
は、インタラクティブログインシェルの終了時にSIGHUP
をすべてのジョブに送信します。
disown [-ar] [-h] [jobspec ... | pid ... ]
オプションなしで、各
jobspec
をアクティブなジョブのテーブルから削除します。 [...]-h
オプションが指定されている場合、各jobspec
はテーブルから削除されませんになりますが、マークされているため、SIGHUP
はジョブに送信されません。シェルはSIGHUP
を受け取ります。 [...]
関連:
それらは異なります:
disownは、アクティブなジョブテーブルからジョブを削除します。その後、現在のジョブを続行します。 -hを指定すると、プロセスは[〜#〜] [〜#〜]でSIGHUPを送信します。代わりに、SIGHUPを受け取ったときに、それを含むシェルと共に死ぬことになります。
NohupはHUPを無視します。次に、プロセスの終了によってターミナルに渡されたものはすべて、代わりにファイルNohup.out
。
NohupはPOSIXで定義されていますが、disownは定義されていません。