¿Hay alguna forma de evitar la congelación de tmux cuando se envía mucho texto al terminal?

¿Hay alguna forma de evitar la congelación de tmux cuando se envía mucho texto al terminal?

En una sesión tmux dentro de xterm, cuando un programa genera mucha salida (como si cat very_long_filetoda 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

información relacionada