Ctrl-s挂起终端模拟器?


311

我在vimdoc中碰到一个句子:

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

这把钥匙确实挂在我的vim上。我当时以为这是vim的错,因为在emacs nox中使用C-s/ 时没有问题C-x C-s。但是就在我阅读联机帮助页并按时Ctrl-s,它也挂起man (我将其设置less为PAGER)。

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

终端仿真器是xtermlxterminal,并且tty也存在此问题。和Ctrl+ q放过程便又在所有情况下。


6
这可能是一个愚蠢的问题,但您没有提及您在问题中尝试过的内容。您试图C-q重新启用滚动功能,对吗?
h3rrmiller 2013年

3
@ h3rrmiller是的,是的。但是我只想知道为什么ctrl-s导致进程挂起。
陈洪旭2013年

在出现带有滚动锁定键的键盘之前,C-s以及C-q过去的“滚动锁定切换”。您可以通过添加禁用此功能stty ixany,并stty ixoff -ixon给你.bashrc
h3rrmiller

2
这是当今终端仿真器中的愚蠢历史设置。请参阅此相关问题以了解如何修复终端。
Ingo Karkat 2013年

1
@IngoKarkat我不会说这很蠢...我仍然会不时使用它
h3rrmiller 2013年

Answers:


361

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

当数据链路的一端(在这种情况下为终端仿真器)不能再接收任何数据时(因为缓冲区已满或接近满载或用户发送C-s),它将发送“ XOFF”以告知发送方数据链接暂停直到收到“ XON”信号。

实际情况是,“ XOFF”告诉内核中的TTY驱动程序将正在发送数据的进程置于睡眠状态(例如暂停影片),直到TTY驱动程序被发送“ XON”以告知内核来恢复该过程,就好像它从来没有停止过一样。

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

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

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

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

stty -ixon

10
实际上,我认为它至少可以追溯到70年代,如果不是60年代的话。
基思(Keith)2013年

但是,它似乎无法在Ubuntu 16.04上运行。
罗伯特

3
“ stty -ixon” <-----这是我上周在互联网上阅读的最重要的内容之一。谢谢。
布拉德·P。

实际上,其历史早于80年代开始了几十年。参见TTY揭秘
RoboAlex

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.