我需要在我的大学服务器上运行一个 java 程序。我通过 ssh 通过他们的服务器远程登录
所以我像这样使用 nohup:
nohup java -jar project.jar &
Run Code Online (Sandbox Code Playgroud)
但是,当我注销并关闭终端然后重新登录服务器时,我的进程丢失/被终止。
cuo*_*glm 14
nohup只使程序免疫SIGHUP和SIGQUIT信号。当您从会话注销时,现代 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,这不是一个声明所有权并继续运行的程序。它只是在它自己的进程组中启动一个程序。
| 归档时间: |
|
| 查看次数: |
13096 次 |
| 最近记录: |