为什么使用 setsid、nohup 或 disown 关闭 SSH 连接后无法运行程序?

为什么使用 setsid、nohup 或 disown 关闭 SSH 连接后无法运行程序?

我正在尝试在远程服务器上运行程序“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 信号,例如当尚未分配伪终端时。

正如评论中提到的,screentmux也非常适合。我个人更喜欢tmux

相关内容