Если я запускаю команду с большим количеством выходных данных в 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 он останавливается практически сразу.
grep -R "a" ~/
(не записывать в файл) ... аyes | nl | cut -f1 | head -9999999 > ~/file
потомcat ~/file
.Ответы:
У tmux теперь есть следующие опции:
Вы можете установить значения для них, что облегчит ввод ^ C и друзей. Смотрите
man tmux
:источник
setw -g c0-change-trigger 10
setw -g c0-change-interval 250
~ / .tmux.confВы всегда можете подать
kill-pane
команду изнутри сессии. Если текст терминала выглядит как мусор, переименование окна и / или выдачаreset
должны исправить это.источник
Поскольку
tmux
он вставляется междуcat
процессом и вашим терминалом, ему необходимо прочитать выходные данныеcat
, записать их в терминал и одновременно прочитать ваши входные данные из терминала (^ C) и отправить их в оболочку, чтобы прервать команда. Я не уверен точно, что вызывает задержку, но это что-то о том, какtmux
буферизует ввод-вывод между вами и оболочкой, которая работаетtmux
.источник
Предполагая, что вы используете ssh через соединение с низкой задержкой, вы пробовали использовать mosh ? Среди других очень приятных вещей, таких как предсказание ввода, а также выжившие разъединения и даже изменение IP на стороне клиента, это также специально улучшает время реакции при использовании Ctrl-C (путем только периодического обновления содержимого терминала вместо отправки всего потока) ,
Вы можете использовать
tmux
внутриmosh
без каких-либо проблем.источник
У меня была эта проблема с Tmux 2.3. Я попытался установить параметры c0-change-interval и c0-change-trigger, как описано выше, но они больше не доступны. Вот изменение git с новым попытанным решением: https://github.com/tmux/tmux/commit/3f4ee98162cd5bb7000f93fec0e631e123b1281d
Возврат к tmux 1.8 исправил проблему без необходимости устанавливать какие-либо параметры.
источник