![当大量文本输出到终端时,有什么方法可以防止 tmux 冻结?](https://linux22.com/image/1312783/%E5%BD%93%E5%A4%A7%E9%87%8F%E6%96%87%E6%9C%AC%E8%BE%93%E5%87%BA%E5%88%B0%E7%BB%88%E7%AB%AF%E6%97%B6%EF%BC%8C%E6%9C%89%E4%BB%80%E4%B9%88%E6%96%B9%E6%B3%95%E5%8F%AF%E4%BB%A5%E9%98%B2%E6%AD%A2%20tmux%20%E5%86%BB%E7%BB%93%EF%BC%9F.png)
在 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