В сеансе 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