我正在尝试在远程服务器上运行程序“ao”。为了在关闭 SSH 连接后继续运行,我尝试了以下操作:
setsid ./a.o
nohup ./a.o
./a.o &
disown -h %1
这些选项似乎都不起作用,我不知道为什么。有什么办法可以解决这个问题吗?
PS 我使用隧道连接通过跳转机连接到服务器。另外,这是一个涉及在 GPU 上运行 CUDA 代码的程序。这些与问题有什么关系吗?
答案1
这nohup
维基百科页面具体提到了这个问题:
请注意,nohupping 后台作业通常用于避免在从远程 SSH 会话注销时终止它们。在这种情况下经常出现的另一个问题是 ssh 拒绝注销(“挂起”),因为它拒绝丢失来自/发往后台作业的任何数据。[6][7] 也可以通过重定向所有三个 I/O 流来解决此问题:
$ nohup ./myprogram > foo.out 2> foo.err < /dev/null &
还要注意,关闭 SSH 会话并不总是向依赖进程发送 HUP 信号,例如当尚未分配伪终端时。
正如评论中提到的,screen
和tmux
也非常适合。我个人更喜欢tmux
。