25

Если я запускаю команду с большим количеством выходных данных в tmux, но решаю отменить ее с помощью Ctrl-C, задержка составляет 10-15 секунд, прежде чем она останавливается. Однако, если я делаю то же самое за пределами tmux, это немедленно останавливается. Почему это и можно ли это исправить?

На практике эта проблема возникает, когда я выполняю команду grep -R для большого каталога, и мой поиск недостаточно ограничен. Обходным путем будет сначала направить результат в wc чтобы убедиться, что вывод не слишком длинный, но это всего лишь еще один шаг, который я хотел бы избежать.


Заметки:

  • Это имеет то же поведение в терминале Gnome, uxterm, st и обычном виртуальном терминале (например, ctrl-alt-f2), но задержка меньше в обычном виртуальном терминале.
  • Я не единственный: http://www.mail-archive.com/tmux-users@lists.sourceforge.net/msg01569.html
  • Задержка будет больше, если окно моего терминала будет больше. Для полноэкранного терминала требуется около 15 секунд, чтобы остановить grep -R (без других аргументов) в загроможденном домашнем каталоге. Для терминала размером 80 × 25 он останавливается практически сразу.

5 ответов5

10

У tmux теперь есть следующие опции:

c0-change-interval interval
c0-change-trigger trigger

Вы можете установить значения для них, что облегчит ввод ^ C и друзей. Смотри man tmux:

Эти два параметра настраивают простую форму ограничения скорости для панели. Если tmux видит больше, чем триггерные последовательности C0, которые изменяют экран (например, возврат каретки, переводы строки или возвраты) в течение одной миллисекунды, он немедленно прекращает обновление панели и вместо этого перерисовывает ее целиком каждые миллисекунды интервала . Это помогает предотвратить быстрый вывод (например, yes (1)), перегружающий терминал. По умолчанию используется триггер 250 и интервал 100. Нулевой триггер отключает ограничение скорости.

7

Вы всегда можете выполнить команду kill-pane изнутри сессии. Если текст терминала выглядит как мусор, переименование окна и / или выдача reset должны исправить это.

4

Так как tmux вставляет себя между процессом cat и вашим терминалом, он должен прочитать вывод cat , записать его в терминал и одновременно прочитать ваш ввод с терминала (^ C) и отправить его в оболочку. прервать команду. Я не уверен точно, что вызывает задержку, но это что-то вроде того, как tmux буферизует ввод-вывод между вами и оболочкой, которая работает в tmux .

3

Предполагая, что вы используете ssh через соединение с низкой задержкой, вы пробовали использовать mosh? Среди других очень приятных вещей, таких как предсказание ввода, а также выжившие разъединения и даже изменение IP на стороне клиента, это также специально улучшает время реакции при использовании Ctrl-C (путем только периодического обновления содержимого терминала вместо отправки всего потока),

Вы можете использовать tmux в mosh без проблем.

1

У меня была эта проблема с Tmux 2.3. Я попытался установить параметры c0-change-interval и c0-change-trigger, как описано выше, но они больше не доступны. Вот изменение git с новым попытанным решением: https://github.com/tmux/tmux/commit/3f4ee98162cd5bb7000f93fec0e631e123b1281d

Возврат к tmux 1.8 исправил проблему без необходимости устанавливать какие-либо параметры.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .