如何强制从另一个SSH会话中分离Screen?

221

我在SSH会话中运行了Screen。终端冻结了。重新启动终端后,该Screen会话仍然认为它已经连接。也许是的。也许我不知道这意味着什么。

我想从新的SSH登录中附加到该Screen会话。我不想杀死该Screen会话,因为那里正在进行重要的事情。 :)

我认为我有以下选项(但我都不知道如何解决):

  • 如何分离该Screen会话?
  • 如何终止与该Screen会话连接的SSH会话?
3个回答

359

正如Jose所回答的一样,screen -d -r可以解决问题。这是从man页面获取的两个命令的组合。

screen -d用于分离已经运行的screen会话,screen -r用于重新连接现有的会话。通过运行screen -d -r,你强制screen将其分离并恢复会话。

如果您使用大写的-D -RR,我引用man页面,因为它太好了,不能错过。

立即在此处连接。不管这意味着什么,请执行它。

注意:始终通过“screen -list”检查会话的状态是一个好习惯。


6
你也可以使用 screen -x 命令,打字更快,但并非完全等效。它会在不先分离会话的情况下第二次附加会话,导致多显示模式。 - jlh
22
记住 "Screen Doctor";screen -Dr 的意思是恢复之前的 screen 会话。 - user5359531

63
尝试使用 screen -d -rscreen -D -RR

15

简短回答

  1. 不弹出其他会话重新连接:screen -x
  2. 获取显示列表:^A*,选择要断开的一个,按d


解释回答

背景:当我寻找相同问题描述的解决方案时,我总是会找到这个答案。 我想提供更合理的解决方案。(例如:其他已连接的屏幕具有不同的大小,我无法在终端中强制调整其大小。)

注意: PREFIX通常是^A= ctrl+a

注意:显示也可能被称为:

  • "用户前端"(在at命令手册中的屏幕中)
  • "客户端"(tmux词汇,此功能为detach-client
  • "终端"(如我们在用户界面中称窗口)/取决于

1. 重新附加会话screen -x

-x连接到未分离的屏幕会话而不使其脱离

2. 列出此会话的显示PREFIX*

这是用于默认键绑定:PREFIX:displays。在屏幕内执行它,以识别我们要断开连接的其他显示(例如更小的尺寸)。(当前显示在未选择时以明亮的颜色/粗体显示)。

term-type   size         user interface           window       Perms
---------- ------- ---------- ----------------- ----------     -----
 screen     240x60         you@/dev/pts/2      nb  0(zsh)        rwx
 screen      78x40         you@/dev/pts/0      nb  0(zsh)        rwx
使用箭头选择目标显示器,按下d键。如果没有反应,则尝试分离自己的显示器,屏幕不会将其分离。如果是另一个显示器,则在一两秒钟内,该项将消失。
ENTER键退出列表。 可选:为了使内容适合您的屏幕,重排格式PREFIXF(大写F) 摘自screen手册页:

displays

显示所有当前连接的用户前端(显示器)的表格清单。这对于多用户会话最有用。以下键可以在显示列表中使用:

  • mouseclick 移动到所选行。当“mousetrack”设置为开启时可用。
  • space 刷新列表
  • d 分离该显示器
  • D 强制分离该显示器
  • C-genterescape 退出列表

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接