有时在linux下shell终端中,会突然出现终端应用卡死,无法接受键盘输入, 但是其它分屏, 系统都是正常的。这本来是一个终端的很老的功能, 叫软件流控制(XON/XOFF flow control),具体就是当client(terminal emulator), 也就是常用的终端模拟器无法接受更多的数据的时, 终端会发送一个 "XOFF" 信号 告诉发送数据端暂停发送, 直到收到"XON"信号,其中发送的 "XOFF" 是告诉内核的 tty 驱动将正在发送数据的进程设置为休眠状态, 直到 tty 驱动发送 "XON" 告诉内核恢复进程, 就好像它从来没有停过一样。
默认情况下,Ctrl-s会启用终端的滚动锁定, 此时禁用终端模拟器的滚动功能 (通过发送 "XOFF" 信号暂停软件的输出 ),终端软件没有任何输出,造成假死的现象,一般情况都是无意识按下了ctrl+s快捷键而已。相应的,Ctrl-q 会禁用滚动锁定, 恢复终端滚动 (通过发送 "XON" 信号来恢复软件的输出).
可以修改配置文件, 在~/.bash_profile 或者~/.bashrc的配置文件里面加上下面的参数并且重启加载bash配置即可要禁用这个功能,就不会假死了:
stty -ixon
source .bashrc
顺便提一下,linux下终端ctrl+z命令会将当前任务切换到后台执行,就无法看到了,可以使用fg命令恢复至前台。