當大量文字輸出到終端時,有什麼方法可以防止 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

相關內容