web-dev-qa-db-ja.com

プロセスJavaまだ強制終了中

大学のサーバーでJavaプログラムを実行する必要があります。ssh経由でサーバーからリモートでログインしています。

だから私はそのようにNohupを使いました:

Nohup Java -jar project.jar &

ただし、ログアウトしてターミナルを閉じてからサーバーに再度ログインすると、プロセスが見つからないか、強制終了されます。

11
bigubosu

Nohupは、プログラムにSIGHUPおよびSIGQUITシグナルの影響を受けないようにします。 Modern Shellは、セッションからログアウトするときに他の信号を送信する可能性があるため、Nohupの下で実行されている場合でも、プログラムが強制終了されないという保証はありません。

より良い解決策は、tmuxまたはscreenを使用することです。または、bashを使用する場合は、以下を試すことができます。

$ Java -jar project.jar &
$ disown
14
cuonglm

(慢性的に機能しない)Nohupの代わりのさらに別のオプション:

setsid Java -jar project.jar </dev/zero &>/dev/null &

これは効果的にプロセスを「デーモン化」します。現在はinitが所有しているため、HUPされることはなく、I/Oストリームは安全であり、バックグラウンドに分岐されています。

見る man setsid 詳細については。 screentmuxとは異なり、これは所有権を主張して実行し続けるプログラムではありません。独自の プロセスグループ でプログラムを起動するだけです。

13
goldilocks

もう1つのアイデアは、screenコマンドを使用することです。画面なしでプログラムを起動し、デタッチしてログアウトすることができます。その後、ログインして実行中のスクリーンセッションにアタッチできます。

チュートリアル: http://www.rackaid.com/blog/linux-screen-tutorial-and-how-to/

3
Tobias