当大量文本输出到终端时,有什么方法可以防止 tmux 冻结?

当大量文本输出到终端时,有什么方法可以防止 tmux 冻结?

在 xterm 内的 tmux 会话中,当程序生成大量输出时(例如整个cat very_long_file会话暂时冻结。即使我按下 Ctrl-C 也不会中断任何内容。大概是因为 tmux 已冻结并且它没有将 Ctrl-C 转发给生成输出的程序。有什么方法可以防止这种情况发生。

答案1

正确的解决方案是查看 tmux 的 c0-* 选项,尝试限制输出速率。这个问题之所以存在,是因为数据发送到终端的速度比终端显示的速度快,所以限制速率是唯一的方法。

答案2

我在 Ubuntu 12.10 上的 tmux 1.6-2 中仍然遇到此问题。我发现的一个解决方法是从会话中分离(前缀 + d),然后重新连接(tmux attach,快速 shell 别名的良好候选者)。看起来 tmux 实际上在后台响应迅速---您可以使用 ctrl-c 确认您的进程实际上已立即终止---只是绘图被阻止了。分离立即起作用,当您重新连接时,绘图将跳到最后。

答案3

据我所知,目前没有办法在当前版本中阻止它,但一些工作正在进行中。你可以在 tmux 的邮件列表中找到一些补丁http://thread.gmane.org/gmane.comp.terminal-emulators.tmux.user/2689

在网络上搜索的一个好关键词是“流量控制”。

答案4

不幸的是,从 tmux 2.1 版开始,用于限制速率的 c0-* 选项已被删除(变更日志据我所知,自定义速率限制的唯一方法是在源代码(tmux.h)中更新影响它的变量:

READ_SIZE 是 pty 中保存的最大数据大小(事件高水位)。READ_BACKOFF 是在 pty 读取后退出之前等待输出到 tty 的数据量。READ_TIME 是在 tty 高于 READ_BACKOFF 的情况下在下一次读取之前退出的时间(以微秒为单位)。

您将在哪里找到默认设置:(从 tmux v2.2 开始):

#define READ_SIZE 1024
#define READ_BACKOFF 512
#define READ_TIME 100

相关内容