进程java仍然被杀死

big*_*osu 11 nohup

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

所以我像这样使用 nohup:

nohup java -jar project.jar &
Run Code Online (Sandbox Code Playgroud)

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

cuo*_*glm 14

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

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

$ java -jar project.jar &
$ disown
Run Code Online (Sandbox Code Playgroud)


gol*_*cks 13

代替(慢性功能障碍)的另一种选择nohup

setsid java -jar project.jar </dev/zero &>/dev/null &
Run Code Online (Sandbox Code Playgroud)

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

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