控制台/ shell缓存/恢复如何工作?

时间:2017-08-02 14:57:40

标签: linux caching ssh terminal konsole

这个问题纯粹是出于好奇;没有问题需要解决。

注意:我在CentOS 7上使用Konsole。

当我通过SSH连接到远程控制台并使会话暂停一段时间时,它会超时。作为解决方法,我使用less [some-file]来保持会话处于活动状态。

显然,当我在一天结束时暂停VM时,会话仍会中断。

第二天,当我开始一个新的SSH会话时,一切正常除了一些Konsole功能不起作用(即清除回滚,我经常使用)用于同一个终端窗口用于SSH会话。

然而,在我less文件并退出之后,会发生两件事:

  1. Konsole恢复正常工作。
  2. 在我使用less之前终端中输出的内容被前一天的任何输出替换,在会话被关闭之前关闭我正在进行SSH连接的VM。
  3. 奇怪的是,这发生在所有~4个并发终端/会话中(每个终端/会话都恢复了前一天的输出)。 [编辑:澄清:当我在特定终端中使用SSH / less时,每个~4个终端都表现出这种行为。每个人从前一天恢复其输出。在一个终端/会话中执行此操作影响其他终端/会话]

    我认为任何具有自己的“gui”的终端应用程序(例如vi,nano等)都会发生这种情况,并不是less特有的。

    似乎有一些缓存正在进行中。我假设退出less(或vi,nano等)会触发一般的shell输出恢复,但这种特殊的表现似乎有点奇怪。

    知道发生了什么事吗?

1 个答案:

答案 0 :(得分:1)

备用屏幕功能(最初为xterm)问题中描述的终端功能,但由其他几个终端(包括konsole)复制/模仿)。根据终端描述,您可能/可能不使用此功能。

less并且大多数全屏终端程序(例如vi)发送转义序列以切换到备用屏幕,如果它们在终端描述中定义(即{{1} }})。

根据说明,听起来好像您在TERM=xterm的同一个实例中使用不同的标签,并且记住您的终端设置为备用屏幕。 konsole和其他一些程序试图保存/恢复"会话"暂停时的信息,这可能是保存/恢复的好东西。

在备用屏幕中,终端程序通常很少或根本无法访问回滚区域。

您可以使用konsole发送相同的转义序列(不运行tput):

less

(如果终端说明

进一步阅读: