tmux lento para interromper o processo com Ctrl-C


25

Se eu executar um comando com muita saída no tmux, mas decidir cancelá-lo com Ctrl-C, haverá um atraso de 10 a 15 segundos antes que ele pare. No entanto, se eu fizer a mesma coisa fora do tmux, ele será interrompido imediatamente. Por que isso e corrigível?

Na prática, esse problema surge quando estou trabalhando grep -Rem um diretório grande e minha pesquisa não é suficientemente restrita. Uma solução alternativa seria canalizar o resultado wcprimeiro para garantir que a saída não seja muito longa, mas isso é apenas mais uma etapa que eu gostaria de evitar.


Notas:

  • Isso tem o mesmo comportamento no Gnome Terminal, uxterm, st e um terminal virtual simples (por exemplo, ctrl-alt-f2), mas o atraso é menor no terminal virtual simples.
  • Eu não sou o único: http://www.mail-archive.com/tmux-users@lists.sourceforge.net/msg01569.html
  • O atraso será maior se minha janela do terminal for maior. Para um terminal de tela cheia, leva cerca de 15 segundos para parar grep -R(sem outros argumentos) em um diretório inicial desordenado. Para um terminal de 80 × 25 caracteres, ele pára quase imediatamente.

Não percebo nenhuma diferença discernível. Eu tentei grep -R "a" ~/(não escrevendo para arquivo) ... e yes | nl | cut -f1 | head -9999999 > ~/filedepois cat ~/file.
precisa saber é o seguinte

@ Peter.O Basta digitar "yes" e pressionar Enter, seu tmux está condenado.
Solotim

Respostas:


10

O tmux agora tem as seguintes opções:

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

Você pode definir valores para eles, o que facilitará a digitação de ^ C e amigos. Veja man tmux:

Essas duas opções configuram uma forma simples de limitação de taxa para um painel. Se o tmux vê mais do que disparar sequências C0 que modificam a tela (por exemplo, retornos de carro, alimentações de linha ou backspaces) em um milissegundo, ele pára de atualizar o painel imediatamente e, em vez disso, o redesenha inteiramente a cada intervalo de milissegundos. Isso ajuda a evitar que a saída rápida (como sim (1)) sobrecarregue o terminal. O padrão é um gatilho de 250 e um intervalo de 100. Um gatilho de zero desativa o limite de taxa.


Essa deve ser a solução aceita, porque funciona.
polym

2
Por exemplo, setw -g c0-change-trigger 10 setw -g c0-change-interval 250>> ~ / .tmux.conf
DmitrySandalov

2
Eu tentei estes no tmux 2.3 e eles não foram reconhecidos. Torna-se totalmente inutilizável quando os comandos emitem muita saída.
ijt

1
Desde o Tmux 2.1, essas opções não existem mais de acordo com raw.githubusercontent.com/tmux/tmux/2.6/CHANGES As opções c0- * para limitação de taxa foram removidas. Em vez disso, é utilizada uma abordagem de retirada.
MEGAR

7

Você sempre pode emitir kill-panecomandos de dentro da sessão. Se o texto do terminal parecer lixo renomeando a janela e / ou a emissão resetdeve corrigi-lo.


4

Como tmuxestá se inserindo entre o catprocesso e seu terminal, ele precisa ler a saída cat, gravá-la no terminal e, ao mesmo tempo, ler sua entrada do terminal (the ^ C) e enviá-la ao shell para interromper o processo. comando. Não sei exatamente o que causa o atraso, mas é algo sobre como os tmuxbuffers de E / S entre você e o shell são executados tmux.


3

Supondo que você esteja usando ssh em uma conexão de baixa latência, você já tentou usar mosh ? Entre outras coisas muito boas, como previsão de entrada, além de desconexões sobreviventes e até mesmo um IP em mudança no lado do cliente, também melhora especificamente o tempo de reação ao usar Ctrl-C (atualizando apenas o conteúdo do terminal periodicamente em vez de enviar todo o fluxo) .

Você pode usar tmuxdentro moshsem problemas.


Estranhamente, isso acontece quando estou trabalhando localmente. mosh parece bem arrumado, no entanto.
Snowball

1

Eu estava tendo esse problema com o tmux 2.3. Tentei definir as opções c0-change-interval e c0-change-trigger, conforme descrito acima, mas elas não estão mais disponíveis. Aqui está a mudança do git com a nova solução tentada: https://github.com/tmux/tmux/commit/3f4ee98162cd5bb7000f93fec0e631e123b1281d

A reversão para o tmux 1.8 corrigiu o problema para mim sem ter que definir nenhuma opção.


Eles parecem estar tentando corrigir isso em vez de usar a solução alternativa, portanto, as versões mais recentes devem melhorar ainda mais a saída. github.com/tmux/tmux/issues/849
dragon788
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.