Ctrl-s 挂起终端模拟器?

Ctrl-s 挂起终端模拟器?

我在vimdoc中看到一句话:

Note: CTRL-S does not work on all terminals and might block
                further input, use CTRL-Q to get going again.

使用 CTRL-S 确实挂起了我的 vim。我以为是vims的错,因为我在emacs nox中使用C-s/时没有问题。C-x C-s然而,刚才,当我阅读手册页并按下 时,它也Ctrl-s挂起(是输出寻呼机)。manless

那么,有人可以告诉我发生了什么事吗?

我测试过的终端模拟器是xtermlxterminaltty也有这个问题。在所有情况下,A Ctrl+都会取消挂起终端。q

答案1

该功能称为软件流控制(XON/XOFF 流控制)

当数据链路的一端(本例中为终端仿真器)无法接收更多数据(因为缓冲区已满或接近满或用户发送C-s)时,它会发送一个“XOFF”来告诉发送端数据链接暂停,直到收到“XON”信号。

幕后发生的事情是“XOFF”告诉内核中的 TTY 驱动程序将发送数据的进程置于睡眠状态(如暂停电影),直到 TTY 驱动程序发送“XON”来告诉内核恢复该进程,就好像它从未停止过一样。

C-s启用终端滚动锁定。这会阻止您的终端滚动(通过发送“XOFF”信号来暂停软件的输出)。

C-q禁用滚动锁。恢复终端滚动(通过发送“XON”信号恢复软件的输出)。

此功能是旧功能(当终端非常慢并且不允许滚动时)并且默认情况下启用。

~/.bash_profile要禁用此功能,您需要在或中执行以下操作~/.bashrc

stty -ixon

答案2

在我的脚本末尾.bashrc我添加了:

#so as not to be disturbed by Ctrl-S ctrl-Q in terminals:
stty -ixon

编辑:随着时间的推移,我已经从我的配置中删除了这一行,因为我最终发现使用 Ctrl-S 冻结终端输出并使用 Ctrl-Q 恢复它很方便。虽然不是每天都有用,但拥有它还是很不错的。

相关内容