回答:
nohup
プログラムSIGHUP
をSIGQUIT
シグナルおよびシグナルの影響を受けないようにするだけです。最新のシェルは、セッションからログアウトするときに他のシグナルを送信する可能性があるため、で実行している場合でも、プログラムが強制終了されないという保証はありませんnohup
。
より良いソリューションを使用しているtmux
かscreen
、またはあなたが使用している場合bash
、あなたは試すことができます:
$ java -jar project.jar &
$ disown
disown
、手動でリダイレクトする必要があります。たとえば、追加</dev/null &>/dev/null
ssh localhost 'sleep 10m & disown'
。bash
終了しません。
ssh
端子に接続するプログラムがある場合には終了しません。ただし、インタラクティブに実行する場合は上記で問題ありません。
(慢性的に機能不全)の代わりのさらに別のオプションnohup
:
setsid java -jar project.jar </dev/zero &>/dev/null &
これは効果的にプロセスを「デーモン化」します。現在はinitが所有しているため、HUPされることはなく、I / Oストリームは安全であり、バックグラウンドに分岐されています。
詳細についてはman setsid
、を参照してください。違ってscreen
かtmux
、これは所有権を主張し、実行し続けプログラムではありません。独自のプロセスグループでプログラムを起動するだけです。
setsid
この方法でもう少し馬鹿な証拠です。nohupによって暗黙的に指定されたステップをスキップします(プロセスをinitによって親のない親として親にします)。 nohup
後でジョブをフォアグラウンドにしたい場合は、より柔軟になります。
もう1つのアイデアは、screenコマンドを使用することです。画面なしでプログラムを起動し、デタッチしてログアウトすることができます。その後、ログインして実行中の画面セッションにアタッチできます。
チュートリアル:http : //www.rackaid.com/blog/linux-screen-tutorial-and-how-to/
STDOUTおよびSTDERRをnullにリダイレクトしてnohupを実行してみてください。
nohup java -jar project.jar 2>&1 &
nohup.out
)。
nohup java -jar project.jar 2>/dev/null &
たと思いますが、あなたは明らかにあなたが何をしているのか分かりません。さらに良いことに、餌もstdin
/dev/null
。
stdout
しstderr
ていくつかのファイルに試します-閉じたターミナルstdout
/ に書き込もうとすると、SIGHUP以外のシグナルによってプロセスが強制終了される可能性がありますstderr
。たとえば、ジョブの署名の>/dev/null 2>&1
前にコマンドに追加します&
。