切断した後も実行を続けるには、プロセスを切断する必要がありますか?

切断した後も実行を続けるには、プロセスを切断する必要がありますか?

disown接続を切断した後もジョブを実行し続けるには、なぜ必要なのか、なぜ必要なのかを説明できますか?

私がこの質問をする理由は、私が訪問したすべてのウェブサイトで使用するように言われていますが、それdisown自体bgbg私にとって効果的であり、その理由を知りません。

まだその目的を完全に理解していないからですか、それともコマンドのデフォルト動作にdisown影響を与えるいくつかの設定がありますか?bg

これが私がしたことです:

  • SSH経由でCentOS 6システムに接続
  • 簡単なプロセスを作成しました。

    tar zcvf example.tar.gz ./examplepath > /dev/null 2>&1
    
  • ジョブが一時停止しました

  • バックグラウンドで復元するbg 1
  • SSHサーバーから切断する

その後、FTPを介してファイルサイズがまだ増加していることを確認しましたが.tar.gz、そうでした。

答え1

バックグラウンドで実行されているプロセスはbg通常、&次の2つの状況で終了します。

  1. シェルはSIGHUPを受け取ります。
  2. 彼らはもう存在しない端末に書き込もうとします。

項目#1は端末を閉じたときの犯人である。しかし、それが起こるかどうかは次のものです。どのように端末を閉じます。次の方法でドラッグできます。

  1. たとえば、ウィンドウマネージャで「X」をクリックします。
  2. exitlogoutまたはCTRL+を入力できますD

アイテム#1を使用すると、SIGHUPが送信されます。 #2 いいえ。

簡単に言えば、バックグラウンドプロセスを使用してからbg、または+を使用してログアウトすると、プロセスは終了しません。exitlogoutCTRLD

答え2

端末を閉じると、その端末を使用するすべてのプロセス(出力TTYの列を参照ps -elf)は、SIGHUPプロセスが実行したい操作に応じてSIGHUP。クラシックUNIX(AIX、Solaris)では、この信号が発生するとプロセスは終了します。そのため、disown.fromを使用する必要がありますman bash

デフォルトでは、シェルはSIGHUPを受信した後に終了します。対話型シェルは、シャットダウン前に実行中または停止したすべてのジョブにSIGHUPを再送信します。停止したジョブは、SIGHUPを受信できるようにSIGCONTに送信されます。シェルが特定のジョブにシグナルを送信しないようにするには、disown組み込みコマンド(以下のSHELL BUILTINコマンドを参照)を使用してジョブテーブルからそのジョブを削除するか、disown -hを使用してSIGHUPを受信しないようにマークする必要があります。

関連情報