tmux 使用 Ctrl-C 中断进程的速度很慢

Sno*_*all 26 tmux

如果我在 tmux 中运行一个有大量输出的命令,但决定用 Ctrl-C 取消它,那么在它停止之前会有 10-15 秒的延迟。但是,如果我在 tmux 之外做同样的事情,它会立即停止。为什么会这样,是否可以修复?

实际上,当我grep -R在一个大目录上进行操作并且我的搜索没有受到足够的限制时,就会出现这个问题。一种解决方法是首先将结果传送到管道wc以确保输出不会太长,但这只是我想避免的另一个步骤。


笔记:

  • 这在 Gnome 终端、uxterm、st 和普通虚拟终端(例如,ctrl-alt-f2)中具有相同的行为,但在普通虚拟终端中延迟较小。
  • 我不是唯一一个:http : //www.mail-archive.com/tmux-users@lists.sourceforge.net/msg01569.html
  • 如果我的终端窗口更大,延迟会更长。对于全屏终端,grep -R在杂乱的主目录中停止(没有其他参数)大约需要 15 秒。对于 80×25 字符的终端,它几乎立即停止。

小智 11

tmux 现在有以下选项:

c0-change-interval interval
c0-change-trigger trigger
Run Code Online (Sandbox Code Playgroud)

您可以为这些设置值,这将使 ^C 和朋友更容易输入。见man tmux

这两个选项为窗格配置了一种简单的速率限制形式。如果 tmux在一毫秒内看到多个修改屏幕的触发C0 序列(例如,回车、换行或退格),它将立即停止更新窗格,而是每隔间隔毫秒重新绘制它。这有助于防止快速输出(例如 yes(1))压倒终端。默认值为 250 的触发器和 100 的间隔。零触发器将禁用速率限制。

  • 从 Tmux 2.1 开始,这些选项不再存在,根据 https://raw.githubusercontent.com/tmux/tmux/2.6/CHANGES 用于速率限制的 c0-* 选项已被删除。相反,使用退避方法。 (3认同)
  • 例如`setw -g c0-change-trigger 10``setw -g c0-change-interval 250` >> ~/.tmux.conf (2认同)
  • 我在 tmux 2.3 上尝试了这些,但无法识别。当命令大量输出时,它变得完全无法使用。 (2认同)

小智 7

您始终可以kill-pane从会话中发出命令。如果终端文本看起来像垃圾重命名窗口和/或发出reset应该修复它。


che*_*ner 4

由于tmux将自身插入到cat进程和终端之间,因此它需要读取 的输出cat,将其写入终端,同时从终端(^C)读取您的输入并将其发送到 shell 以中断命令。我不确定到底是什么导致了延迟,但它与如何tmux缓冲您和运行在tmux.