Existe alguma maneira de evitar o congelamento do tmux quando muito texto é enviado para o terminal?

Existe alguma maneira de evitar o congelamento do tmux quando muito texto é enviado para o terminal?

Em uma sessão tmux dentro do xterm, quando um programa gera muita saída (como cat very_long_filetoda a sessão congelada por um tempo. Mesmo se eu pressionar Ctrl-C, nada é interrompido. Presumivelmente porque o tmux está congelado e não está encaminhando o Ctrl-C para o programa que gera a saída. Existe alguma maneira de evitar isso.

Responder1

A solução correta é examinar as opções c0-* do tmux para tentar limitar a taxa de saída. A razão pela qual esse problema existe é porque os dados são enviados ao terminal mais rápido do que ele pode exibi-los, portanto, a limitação de taxa é a única maneira.

Responder2

Ainda tenho esse problema no tmux 1.6-2 no Ubuntu 12.10. Uma solução alternativa que encontrei é desconectar-se da sessão (prefixo + d) e reconectar ( tmux attach, bom candidato para um alias de shell rápido). Parece que o tmux realmente responde nos bastidores --- você pode confirmar que seu processo foi realmente encerrado imediatamente com ctrl-c --- é apenas o desenho que está bloqueando. Desanexar funciona imediatamente e, quando você reconectar, o desenho terá pulado para o final.

Responder3

Pelo que eu sei, não há como evitar isso nas versões atuais, mas algum trabalho está em andamento. Você pode encontrar alguns patches na lista de discussão do tmuxhttp://thread.gmane.org/gmane.comp.terminal-emulators.tmux.user/2689.

Uma boa palavra-chave para pesquisar na web é “controle de fluxo”.

Responder4

Infelizmente, as opções c0-* para limitação de taxa foram removidas a partir da versão 2.1 do tmux (registro de alterações). Até onde eu sei, a única maneira de personalizar a limitação de taxa é atualizar as variáveis ​​que a influenciam no código-fonte (tmux.h):

"READ_SIZE é o tamanho máximo de dados a serem mantidos em um pty (o limite máximo do evento). READ_BACKOFF é a quantidade de dados aguardando para serem enviados para um tty antes que as leituras do pty sejam recuadas. READ_TIME é quanto tempo deve recuar antes da próxima leitura (em microssegundos) se um tty estiver acima de READ_BACKOFF."

Onde você encontrará os padrões: (a partir do tmux v2.2):

#define READ_SIZE 1024
#define READ_BACKOFF 512
#define READ_TIME 100

informação relacionada