
disown
接続を切断した後もジョブを実行し続けるには、なぜ必要なのか、なぜ必要なのかを説明できますか?
私がこの質問をする理由は、私が訪問したすべてのウェブサイトで使用するように言われていますが、それdisown
自体bg
はbg
私にとって効果的であり、その理由を知りません。
まだその目的を完全に理解していないからですか、それともコマンドのデフォルト動作にdisown
影響を与えるいくつかの設定がありますか?bg
これが私がしたことです:
- SSH経由でCentOS 6システムに接続
簡単なプロセスを作成しました。
tar zcvf example.tar.gz ./examplepath > /dev/null 2>&1
ジョブが一時停止しました
- バックグラウンドで復元する
bg 1
- SSHサーバーから切断する
その後、FTPを介してファイルサイズがまだ増加していることを確認しましたが.tar.gz
、そうでした。
答え1
バックグラウンドで実行されているプロセスはbg
通常、&
次の2つの状況で終了します。
- シェルはSIGHUPを受け取ります。
- 彼らはもう存在しない端末に書き込もうとします。
項目#1は端末を閉じたときの犯人である。しかし、それが起こるかどうかは次のものです。どのように端末を閉じます。次の方法でドラッグできます。
- たとえば、ウィンドウマネージャで「X」をクリックします。
exit
、logout
またはCTRL+を入力できますD。
アイテム#1を使用すると、SIGHUPが送信されます。 #2 いいえ。
簡単に言えば、バックグラウンドプロセスを使用してからbg
、または+を使用してログアウトすると、プロセスは終了しません。exit
logout
CTRLD
答え2
端末を閉じると、その端末を使用するすべてのプロセス(出力TTY
の列を参照ps -elf
)は、SIGHUP
プロセスが実行したい操作に応じてSIGHUP
。クラシックUNIX(AIX、Solaris)では、この信号が発生するとプロセスは終了します。そのため、disown
.fromを使用する必要がありますman bash
:
デフォルトでは、シェルはSIGHUPを受信した後に終了します。対話型シェルは、シャットダウン前に実行中または停止したすべてのジョブにSIGHUPを再送信します。停止したジョブは、SIGHUPを受信できるようにSIGCONTに送信されます。シェルが特定のジョブにシグナルを送信しないようにするには、disown組み込みコマンド(以下のSHELL BUILTINコマンドを参照)を使用してジョブテーブルからそのジョブを削除するか、disown -hを使用してSIGHUPを受信しないようにマークする必要があります。