En una sesión tmux dentro de xterm, cuando un programa genera mucha salida (como si cat very_long_file
toda la sesión estuviera congelada por un tiempo. Incluso si presiono Ctrl-C, nada se interrumpe. Presumiblemente porque tmux está congelado y no reenvía Ctrl-C a el programa que genera la salida. ¿Hay alguna forma de evitar esto?
Respuesta1
La solución correcta es mirar las opciones c0-* de tmux para intentar limitar la velocidad de salida. La razón por la que existe este problema se debe a que los datos se envían al terminal más rápido de lo que puede mostrarlos, por lo que limitar la velocidad es la única forma.
Respuesta2
Todavía tengo este problema en tmux 1.6-2 en Ubuntu 12.10. Una solución alternativa que encontré es desconectarme de la sesión (prefijo+d) y luego volver a conectarla ( tmux attach
, buen candidato para un alias de shell rápido). Parece que tmux realmente responde bajo el capó. Puede confirmar que su proceso en realidad finaliza inmediatamente con Ctrl-c. Es solo el dibujo el que está bloqueando. La separación funciona de inmediato y, cuando la vuelva a conectar, el dibujo habrá saltado hasta el final.
Respuesta3
Hasta donde yo sé, no hay forma de evitarlo en las versiones actuales, pero se está trabajando en ello. Puedes encontrar algunos parches en la lista de correo de tmux.http://thread.gmane.org/gmane.comp.terminal-emulators.tmux.user/2689.
Una buena palabra clave para buscar en la web es "control de flujo".
Respuesta4
Desafortunadamente, las opciones c0-* para limitar la velocidad se eliminaron a partir de la versión 2.1 de tmux (registro de cambios). Hasta donde yo sé, la única forma de personalizar la limitación de velocidad es actualizar las variables que influyen en ella en el código fuente (tmux.h):
"READ_SIZE es el tamaño máximo de datos que se pueden contener de un pty (la marca de agua máxima del evento). READ_BACKOFF es la cantidad de datos que esperan ser enviados a un tty antes de que se retrocedan las lecturas de pty. READ_TIME es el tiempo que se debe retroceder antes de la siguiente lectura (en microsegundos) si un tty está por encima de READ_BACKOFF."
Donde encontrará los valores predeterminados: (a partir de tmux v2.2):
#define READ_SIZE 1024
#define READ_BACKOFF 512
#define READ_TIME 100