Есть ли способ предотвратить зависание tmux при выводе большого количества текста на терминал?

Есть ли способ предотвратить зависание tmux при выводе большого количества текста на терминал?

В сеансе tmux внутри xterm, когда программа генерирует большой объем вывода (например, ), cat very_long_fileвесь сеанс на некоторое время замораживается. Даже если я нажимаю Ctrl-C, ничего не прерывается. Предположительно, это происходит из-за того, что tmux заморожен и не пересылает Ctrl-C программе, генерирующей вывод. Есть ли способ предотвратить это?

решение1

Правильное решение — посмотреть на параметры c0-* для tmux, чтобы попытаться ограничить скорость вывода. Причина, по которой эта проблема вообще существует, заключается в том, что данные отправляются на терминал быстрее, чем он может их отобразить, поэтому ограничение скорости — единственный способ.

решение2

У меня все еще есть эта проблема в tmux 1.6-2 на Ubuntu 12.10. Один из найденных мной обходных путей — отсоединиться от сеанса (префикс+d) и затем снова присоединить ( tmux attach, хороший кандидат на быстрый псевдоним оболочки). Похоже, что tmux на самом деле отзывчив под капотом — вы можете подтвердить, что ваш процесс на самом деле немедленно завершается с помощью ctrl-c — блокирует только рисунок. Отсоединение срабатывает немедленно, а когда вы снова присоединяетесь, рисунок переходит в конец.

решение3

Насколько мне известно, в текущих релизах нет способа предотвратить это, но работа ведется. Вы можете найти некоторые исправления в списке рассылки tmuxhttp://thread.gmane.org/gmane.comp.terminal-emulators.tmux.user/2689.

Хорошим ключевым словом для поиска в Интернете является «управление потоком».

решение4

К сожалению, параметры c0-* для ограничения скорости были удалены в tmux версии 2.1 (журнал изменений). Насколько мне известно, единственный способ настроить ограничение скорости — это обновить переменные, влияющие на него, в исходном коде (tmux.h):

"READ_SIZE — максимальный размер данных, которые можно хранить из pty (верхняя отметка события). READ_BACKOFF — объем данных, ожидающих вывода на tty, прежде чем чтение pty будет отложено. READ_TIME — это время отсрочки перед следующим чтением (в микросекундах), если tty выше READ_BACKOFF."

Где вы найдете значения по умолчанию: (начиная с tmux v2.2):

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

Связанный контент