切断した後もジョブを実行し続けたい場合、disown
が必要かどうかとその理由を誰かが説明しますか。
私が訪れたすべてのサイトがdisown
とbg
を使用するように言っているので、私は尋ねますが、bg
はそれ自体で機能しており、理由はわかりません。
disown
の目的を完全に理解していないためですか、それともbg
コマンドのデフォルトの動作に影響を与えている設定がどこかにあるためですか?
これが私がしたことです:
簡単なプロセスを作成しました:
tar zcvf example.tar.gz ./examplepath > /dev/null 2>&1
仕事を中断した
bg 1
を介してバックグラウンドで再開しました次に、FTPを介して、.tar.gz
ファイルのサイズがまだ大きくなっているかどうかを確認しました。
bg
または&
を介してバックグラウンドで処理されたプロセスは、通常、次の2つのシナリオで停止します。
アイテム#1は、端末を閉じるときの主な原因です。ただし、それが発生するかどうかは、how端末を閉じるかどうかによって異なります。あなたはそれを閉じることができます:
exit
、logout
、または CTRL+D。アイテム#1は、SIGHUPが送信される結果となるアイテムです。 #2はしません。
非常に長い話ですが、プロセスをbg
でバックグラウンドし、次にexit
、logout
、または CTRL+D、プロセスは強制終了されません。
端末を閉じると、この端末を使用するすべてのプロセス(ps -elf
出力のTTY
列を参照)はSIGHUP
を受け取ります。 SIGHUP
で何をするかは処理次第です。従来のUNIX(AIX、Solaris)では、このシグナルでプロセスが閉じられます。そのため、disown
を使用する必要があります。 man bash
から:
シェルは、SIGHUPを受信するとデフォルトで終了します。終了する前に、対話型シェルは、実行中または停止中のすべてのジョブにSIGHUPを再送信します。停止したジョブはSIGCONTに送信され、SIGHUPを確実に受信します。シェルが特定のジョブにシグナルを送信しないようにするには、disownビルトインを使用してジョブテーブルから削除するか(以下のShell BUILTINコマンドを参照)、disown-hを使用してSIGHUPを受信しないようにマークする必要があります。