1

我使用 VPN 隧道连接到我的工作网络,然后使用 SSH 连接到运行 cygwin 的工作 PC。登录后,我可以附加到屏幕会话,一切正常。

现在,过了一会儿,我离开我的电脑,VPN 隧道迟早会超时。每一端的 SSH 连接最终都会超时,然后我最终回到我的电脑上做一些工作。从理论上讲,这应该是一个简单的问题,只需重新启动 VPN,通过 SSH 重新连接,然后运行“screen -r -d”。

然而,显然当 sshd 守护程序在 cygwin PC 上超时时,它会使屏幕会话处于某种挂起状态。我可以通过在运行屏幕会话时单击 cygwin bash shell 窗口上的关闭框来重现类似的挂起状态。

一旦发生这种情况,有什么方法可以让屏幕会话恢复,这样我就不会丢失任何东西?

4

2 回答 2

5

通过大量的实验,我能够恢复屏幕会话,如下所示:

  1. 查找服务器屏幕进程的PID:ps | grep 屏幕
  2. 向服务器发送 HUP 信号:kill -1 <PID>
  3. 运行屏幕客户端:screen -r -d
于 2011-01-12T02:45:24.547 回答
3

screen正在阻止(死)SSH 会话的 pty。杀死那个来恢复sshd

假设 Linux,并且您当前不在屏幕内:

$ pgrep -U $UID sshd | xargs -rn1 pstree -hp
sshd(16305)────bash(16306)────screen(16670)
sshd(16544)────bash(16545)────xargs(16705)────pstree(16707)
$杀死16305
$屏幕-r
于 2011-01-11T06:26:59.447 回答