Answers:
没有办法,但是为了防止这种情况,我喜欢使用tmux
。我启动tmux,开始操作,然后继续前进。如果返回并发现连接已断开,那么我要做的就是重新连接并输入tmux attach
。
这是一个例子。
$ tmux
$ make <something big>
......
Connection fails for some reason
Reconect
$ tmux ls
0: 1 windows (created Tue Aug 23 12:39:52 2011) [103x30]
$ tmux attach -t 0
Back in the tmux sesion
对于tmux和screen的建议都是很好的建议。它们暗示了您问题的答案,但并未实际说明。这个问题的答案是:没有办法。如果您通过ssh登录,则在连接断开时外壳将终止。解决方法是登录并立即启动某种虚拟终端(例如tmux
)。当连接断开时,您所在的外壳将结束,但是您可以打开新的外壳并重新连接到虚拟终端(正在运行您实际在其中工作的外壳)。
正如威廉所说,简短的答案是没有,没有办法。为了防止这种情况,您可以在失去连接之前使用screen命令
不,断开连接后无法恢复外壳。相反,您可以做的是确保断开连接后正在运行的命令继续运行。
为此,请使用“ nohup”和“ disown”命令,它们通常是大多数Shell上的内置命令,即您无需安装任何程序。但是,这仅适用于非交互式命令。
因此,步骤如下:
当您回到服务器时,只需“ tail nohup.out”即可查看该命令的运行情况。
有人在评论中添加了reptyr而不是答案,所以我不能对其进行投票,但这似乎是对已编辑问题的一个很好的答案,并且在CentOS上运行良好。
参见:https : //github.com/nelhage/reptyr https://www.ostechnix.com/reptyr-move-running-process-new-terminal/
重新连接后,是否可以恢复挂起的会话?
编辑:正在使用yum进行一些更新和安装,并且担心如果进程在进行中的过程中不断挂起,则可能会出现问题。
同样,我失去了与yum更新会话的远程连接。所以我搜索并找到了这个问题...然后这次重新连接并使用了屏幕:
而且在恢复的提示下,我在几个小时前就给了百胜。
从技术上讲,答案都是正确的,这不是恢复已挂起的会话,而是将孤立进程重新绑定到当前会话。也是非常有用的...
正如许多人所建议的screen
和tmux
,它们都支持基本功能,但是具有独特的特定功能,因此不能说一个在所有情况下都优于另一个。例如,只有tmux支持Window-splitting,而只有GNU屏幕可以使用(Ctrl + ar)切换长行换行。在这里查看更详细的比较。
还存在专门解决ssh问题的工具:
Autossh是一个程序,用于启动ssh的副本并对其进行监视,并在死或停止传输流量时根据需要重新启动它。这个想法来自rstunnel。
Mosh是一个远程终端应用程序,它允许漫游,支持间歇性连接并提供智能的本地回显和用户按键的线路编辑。Mosh替代了SSH。它更加健壮和响应迅速,尤其是在Wi-Fi,蜂窝和长途链路上。