tmux повільно перервати процес із Ctrl-C


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 він зупиняється майже відразу.

Я не помічаю різної різниці. Я спробував grep -R "a" ~/(не писав у файл) ... і yes | nl | cut -f1 | head -9999999 > ~/fileпотім cat ~/file.
Пітер.О

@ Peter.O Просто введіть "так", потім натисніть Enter, ваш tmux приречений.
solotim

Відповіді:


10

tmux тепер має такі параметри:

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

Ви можете встановити для них значення, що полегшить набір ^ C та друзів. Дивіться man tmux:

Ці два параметри налаштовують просту форму обмеження швидкості для панелі. Якщо tmux побачить більше, ніж тригерні послідовності C0, які змінюють екран (наприклад, повернення каретки, стрічки передач або зворотні проміжки ) за одну мілісекунд, він зупинить оновлення області негайно і замість цього перемальовує повністю цілком через кожен інтервал мілісекунд. Це допомагає запобігти швидкому надходженню (наприклад, так (1)) перевантаження терміналу. За замовчуванням - тригер 250 та інтервал 100. Тригер нуля вимикає обмеження швидкості.


Це має бути прийнятим рішенням, оскільки воно працює.
полим

2
Наприклад setw -g c0-change-trigger 10 setw -g c0-change-interval 250>> ~ / .tmux.conf
Дмитро Сандалов

2
Я спробував їх на tmux 2.3, і вони не були розпізнані. Це стає абсолютно непридатним, коли команди витрачають багато результатів.
ijt

1
Оскільки Tmux 2.1, ці параметри більше не існують відповідно до raw.githubusercontent.com/tmux/tmux/2.6/CHANGES Параметри c0- * для обмеження швидкості видалено. Натомість використовується підхід Бакоффа.
megar

7

Ви завжди можете видавати kill-paneкоманди протягом сеансу. Якщо текст терміналу виглядає як сміття, перейменувавши вікно та / або видавши, його resetслід виправити.


4

Оскільки tmuxвставляє себе між catпроцесом і вашим терміналом, йому потрібно прочитати висновок з cat, записати його в термінал і в той же час прочитати ваш вхід з терміналу (^ С) і відправити його в оболонку, щоб перервати командування. Я не впевнений, що саме викликає затримку, але це щось про те, як tmuxбуфери вводу / виводу між вами та оболонкою, що працює tmux.


3

Якщо припустити, що ви використовуєте ssh через з'єднання з низькою затримкою, чи намагалися ви використовувати mosh ? Серед інших дуже приємних речей, таких як вхідне передбачення, а також пережиті відключення та навіть зміна IP-адреси на стороні клієнта, він також спеціально покращує час реакції при використанні Ctrl-C (лише періодично оновлюючи вміст терміналу, а не надсилаючи весь потік) .

Ви можете використовувати tmuxвсередині moshбез проблем.


Як не дивно, це трапляється, коли я працюю на місцях. хоч мош виглядає досить акуратно.
Сніжок

1

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

Повернення до tmux 1.8 вирішило для мене проблему, не встановлюючи жодних параметрів.


Здається, вони намагаються виправити це, а не використовувати обхідні шляхи, тому нові версії повинні отримати ще кращий результат. github.com/tmux/tmux/isissue/849
dragon788
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.