この質問は非常 に 多く(本当に たくさん)出てきましたが、答えは一般的に不完全であると思います。一般的な質問は、「sshを終了/殺すと、なぜ私の仕事は殺されないのですか?」であり、これが私が見つけたものです。最初の質問は次のとおりです。次の情報はどの程度一般的ですか?以下は最近のDebian linuxに当てはまるようですが、少し欠けています。そして、他の人は何を知る必要がありますか?
バックグラウンドまたはssh接続で開かれたシェルのすべての子プロセスは、オプションが設定されている場合にのみ ssh接続が閉じられたときにSIGHUPで強制終了されます。
huponexit
shopt huponexit
場合は
huponexit
trueで、あなたは使用することができますnohup
またはdisown
あなたが終了したときに、それは殺さないようにシェルからプロセスを解離します。または、で実行しscreen
ます。少なくとも一部のLinuxでデフォルト
huponexit
であるfalseの場合、通常のログアウトでバックグラウンドジョブは強制終了されません。しかし、場合でも、
huponexit
SSH接続を取得し、その後場合は、falseで殺され、または(通常のログアウトとは異なる)に低下し、バックグラウンドにプロセスがまだ殺されてしまいます。これは(2)によって、disown
またはnohup
(2)のように回避できます。(a)親プロセスが端末であるプロセスと(b)端末にstdin、stdout、またはstderrが接続されているプロセスにはいくつかの違いがあります。(a)でないプロセス(b)、またはその逆のプロセスに何が起こるかわかりません。
最後の質問:行動を回避するにはどうすればよいですか(3)?言い換えると、Debianのデフォルトでは、バックグラウンドプロセスはログアウト後は単独で実行されますが、ssh接続が切断された後は実行されません。接続が正常に閉じられたか、終了されたかに関係なく、プロセスに同じことが起こることを望みます。または、これは悪い考えですか?
編集:ジョブを強制終了する別の重要な方法は、どちらの場合でも機能しますか(?)、screenを介して実行することです。しかし、質問は、物事が殺されるときとそうでないときを理解することに関するものです。例えば、時々、人々はログアウト時にジョブを殺したいことがあります。
ほかのスレッド: - シグナル(SIGHUP)、仕事上の明確化、および制御端末 - /server/117152/do-background-processes-get-a-sighup-when-logging-offは - 続行SSHバックグラウンドタスク/ジョブSSHを閉じる - SSHセッションが閉じられた後にバックグラウンドでジョブプットは実行し続けますか? - 防止SSHクライアントを閉じた後に停止されてから、すでに実行中のバックグラウンド・プロセス - どのように私はそれが私の切断後に実行し続けることが、このようなSSH経由でプロセスを開始することができますか? - OS X上で実行しているリモート・ジョブを維持することができません - 閉じるSSH接続