tmux lento para interrumpir el proceso con Ctrl-C

25

Si ejecuto un comando con mucha salida en tmux, pero decido cancelarlo con Ctrl-C, hay un retraso de 10-15 segundos antes de que se detenga. Sin embargo, si hago lo mismo fuera de tmux, se detiene de inmediato. ¿Por qué es esto y es reparable?

En la práctica, este problema surge cuando lo estoy haciendo grep -Ren un directorio grande y mi búsqueda no está lo suficientemente restringida. Una solución alternativa sería canalizar el resultado wcprimero para asegurarse de que el resultado no sea demasiado largo, pero ese es solo otro paso que me gustaría evitar.


Notas:

  • Esto tiene el mismo comportamiento en Gnome Terminal, uxterm, st y un terminal virtual simple (por ejemplo, ctrl-alt-f2), pero el retraso es menor en el terminal virtual simple.
  • No soy el único: http://www.mail-archive.com/[email protected]/msg01569.html
  • El retraso es mayor si la ventana de mi terminal es más grande. Para un terminal de pantalla completa, tarda unos 15 segundos en detenerse grep -R(sin otros argumentos) en un directorio de inicio desordenado. Para un terminal de 80 × 25 caracteres, se detiene casi de inmediato.
Bola de nieve
fuente
No noto ninguna diferencia perceptible. He intentado grep -R "a" ~/(no escribir en el archivo) ... y yes | nl | cut -f1 | head -9999999 > ~/fileluego cat ~/file.
Peter.O
@ Peter.O Simplemente ingrese "yes" y luego presione Enter, su tmux está condenado.
solotim

Respuestas:

10

tmux ahora tiene las siguientes opciones:

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

Puede establecer valores para estos, lo que hará que ^ C y sus amigos sean más fáciles de escribir. Ver man tmux:

Estas dos opciones configuran una forma simple de limitación de velocidad para un panel. Si tmux ve más que desencadenar secuencias C0 que modifican la pantalla (por ejemplo, retornos de carro, avances de línea o espacios de retroceso) en un milisegundo, dejará de actualizar el panel de inmediato y, en su lugar, lo redibujará completamente cada intervalo de milisegundos. Esto ayuda a evitar que la salida rápida (como sí (1)) abrume el terminal. El valor predeterminado es un activador de 250 y un intervalo de 100. Un activador de cero desactiva la limitación de velocidad.

ThomasAdam
fuente
Esta debería ser la solución aceptada, porque funciona.
polym
2
Por ejemplo, setw -g c0-change-trigger 10 setw -g c0-change-interval 250>> ~ / .tmux.conf
DmitrySandalov
2
Probé estos en tmux 2.3 y no fueron reconocidos. Se vuelve totalmente inutilizable cuando los comandos arrojan mucha salida.
ijt
1
Desde Tmux 2.1, estas opciones ya no existen según raw.githubusercontent.com/tmux/tmux/2.6/CHANGES Se han eliminado las opciones c0- * para limitar la velocidad. En cambio, se utiliza un enfoque de retroceso.
megar
7

Siempre puede emitir kill-panecomandos desde la sesión. Si el texto del terminal parece basura, al cambiar el nombre de la ventana y / o al emitirlo, resetdebería solucionarlo.

lukaszkorecki
fuente
4

Como se tmuxestá insertando entre el catproceso y su terminal, necesita leer la salida cat, escribirla en la terminal y, al mismo tiempo, leer su entrada desde la terminal (el ^ C) y enviarla al shell para interrumpir el mando. No estoy seguro de qué causa exactamente la demora, pero es algo sobre cómo tmuxamortigua la E / S entre usted y el shell que se ejecuta tmux.

chepner
fuente
3

Suponiendo que está usando ssh sobre una conexión de baja latencia, ¿ha intentado usar mosh ? Entre otras cosas muy buenas como la predicción de entrada, así como las desconexiones sobrevivientes e incluso una IP cambiante en el lado del cliente, también mejora específicamente el tiempo de reacción cuando se usa Ctrl-C (al actualizar periódicamente el contenido del terminal en lugar de enviar todo el flujo) .

Puede usar tmuxdentro moshsin ningún problema.

Julien Oster
fuente
Curiosamente, esto sucede cuando estoy trabajando localmente. Mosh se ve muy bien, sin embargo.
Bola de nieve el
1

Estaba teniendo este problema con tmux 2.3. Intenté configurar las opciones c0-change-interval y c0-change-trigger como se describió anteriormente, pero ya no están disponibles. Aquí está el cambio de git con el nuevo intento de solución: https://github.com/tmux/tmux/commit/3f4ee98162cd5bb7000f93fec0e631e123b1281d

Volviendo a tmux 1.8 me solucionó el problema sin tener que configurar ninguna opción.

ijt
fuente
Parece que intentan solucionar esto en lugar de utilizar la solución, por lo que las versiones más nuevas deberían mejorar aún más la salida. github.com/tmux/tmux/issues/849
dragon788