问题的现象:在键盘上按下一些按键后,命令行界面突然卡住,什么输入都没有反馈,光标也不动了。按Ctrl + cCtrl + dCtrl + z都没有反应,就像死机了一样。

解决方法很简单,按下Ctrl + q即可。卡住的原因是你之前误按了Ctrl + s,使得当前应用暂停向终端输出字符。(经常发生在使用Vim的过程中:一种常见的情况是习惯性地把Ctrl + s当作存档操作;另一种是在使用Ctrl + w, s进行分屏操作时,按s的时候没有松开Ctrl

在linux命令行终端,有一对上古留存下来的命令:

Ctrl + s:告诉正在运行的应用,让其暂时停止向终端输出字符。

Ctrl + q:恢复被暂停的输出。

StackExchange所说,这两个命令起源于电传打字机时代。

那个时候,电传机是程序员和计算机交互的主要手段——程序员向电传机打字输入指令,指令被传到计算机处理,计算机将结果传回电传机,电传机在纸带上打印输出结果。

Using a 1930 Teletype as a Linux Terminal - YouTube
来源:YOUTUBE

但问题是,计算机的输出速度很快,电传机的打印速度常常跟不上计算机的输出速度。此时就需要Ctrl + s指令,告诉计算机“你输出的太快了,请等一下我”,让计算机暂停向终端输出字符。当电传机的打印流跟上时,就需要Ctrl + q指令,告诉计算机“我的打印跟上了,请继续输出吧”。

如果没有这两个指令,电传机会持续工作来尝试追赶计算机的输出。当输出很多时,机器可能会过热燃烧。(没错,就是烧起来……更加形象生动的描述请参见StackExchange最高票答案的最高票评论……)

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐