java进程仍然被杀死

java进程仍然被杀死

我需要在我的大学服务器上运行一个java程序。我通过 ssh 通过他们的服务器远程登录

所以我像这样使用 nohup :

nohup java -jar project.jar &

但是,当我注销并关闭终端然后重新登录服务器时,我的进程丢失/被杀死。

答案1

nohup只让程序免疫SIGHUPSIGQUIT信号。当您从会话注销时,现代 shell 可能会发送其他信号,因此不能保证您的程序不会被终止,即使在nohup.

更好的解决方案是使用tmuxscreen,或者如果您使用bash,您可以尝试:

$ java -jar project.jar &
$ disown

答案2

替代(长期功能失调)的另一种选择nohup

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

这有效地“守护”了该进程。它现在由 init 所有,因此永远不会获得 HUP,它的 I/O 流是安全的,并且它已分叉到后台。

请参阅man setsid获取更多信息。与screen或不同tmux,这不是一个声明所有权并继续运行的程序。它只是启动一个自己的程序进程组

答案3

另一个想法是使用 screen 命令。可以在屏幕内启动程序、分离和注销。之后您可以登录并附加到运行屏幕会话。

教程:http://www.rackaid.com/blog/linux-screen-tutorial-and-how-to/

答案4

尝试使用 STDOUT 和 STDERR 重定向到 null 来运行 nohup:

nohup java -jar project.jar 2>&1 &

相关内容