SSH 会话超时时 nohup ./a.out 死掉的真正原因是什么?

SSH 会话超时时 nohup ./a.out 死掉的真正原因是什么?

当您./a.out通过 SSH 在终端中运行时,SSH 会话超时,./a.out就会被终止。为什么是这样?有人说是因为SIGHUP。但运行nohup ./a.out仍然存在同样的问题,当SSH会话超时时,进程nohup ./a.out仍然被杀死。

我看到有人说这是因为父母被杀时孩子也被杀了。但我在其他地方看到它声称通常情况并非如此。

另一种解释是 ./a.out 的标准输出与终端绑定。因此,在终端被杀死后,当./a.out尝试写入终端时,它将收到一个SIGPIPE,这将导致它被杀死。

nohup ./a.outSSH超时死掉的真正原因是什么?

这是我正在运行的实际命令:nohup ./a.out |& tee logs.out

答案1

在您的情况下,tee logs.out写入终端,并且当它在 SSH 连接关闭后尝试写入时将被终止。这反过来也会导致nohup下次a.out写入其标准输出时被杀死。

如果你想nohup ./a.out生存,你应该在没有管道的情况下在后台运行它,并单独监视文件nohup.out

nohup ./a.out &
tail -f nohup.out

或者,使用您的日志文件,

nohup ./a.out > logs.out &
tail -f logs.out

相关内容