断开连接后如何恢复外壳

54 linux shell networking session

我在远程 CentOS 5.6 机器上做一些工作,但我的网络一直在掉线。有没有办法在重新连接后恢复挂起的会话?

编辑:我正在用 yum 进行一些更新和安装,我担心如果进程一直挂在他们正在做的事情中间,这可能是一个问题。

小智 80

没有办法,但为了防止这种情况,我喜欢使用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
Run Code Online (Sandbox Code Playgroud)

  • @sergio 我的心在流血 :-)) 使用 `screen`。 (7认同)
  • @sergio 在 Unix 系统上,几乎任何不需要 root 权限运行的应用程序都可以安装在一个主目录中。 (5认同)

Wil*_*ell 37

tmux 和 screen 的建议都是很好的建议。它们暗示了您的问题的答案,但实际上并未说明。问题的答案是:没有办法。如果您通过 ssh 登录,则在连接断开时 shell 将结束。的解决办法是登录并立即启动某种形式的虚拟终端(这可以用工具做喜欢的dtachabducotmux,或screen)。当连接断开时,您所在的 shell 结束,但您可以打开一个新的 shell 并重新连接到运行您实际工作的 shell 的虚拟终端。

  • 假设 **yum 进程**仍在运行(当 shell 收到 SIGHUP 时没有立即终止),[reptyr](https://github.com/nelhage/reptyr) 或类似的 *可能* 足以恢复该进程或者——如果失败的话——获得任何未来的输出。不过,shell 通常会在断开连接时终止。 (2认同)

小智 10

有人添加reptyr了评论而不是答案,所以我无法投票,但这似乎是对已编辑问题的一个很好的答案,并且在 CentOS 上运行得很好。

看:

有没有办法可以在重新连接后恢复挂起的会话?

编辑:我正在使用 yum 进行一些更新和安装,我担心如果进程在执行任何操作时一直挂起,这可能会成为一个问题。

同样的事情,我失去了与 yum 更新会话的远程连接。所以我搜索并找到了这个问题...然后这次重新连接并使用屏幕:

  1. 重新连接 ssh
  2. 屏幕
  3. 按照上面的链接安装reptyr
  4. ps -a | grep 百胜
  5. 雷普泰尔PSID

我就看到了百胜几个小时前给出的恢复提示。

从技术上讲,答案都是正确的,这不是挂起会话的恢复,而是将孤立进程重新设置为当前会话。

而且非常有用,它也...


小智 9

正如威廉所说,简短的回答是否定的,没有办法。为了防止这种情况,您可以在失去连接之前使用screen 命令