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 parará imediatamente. Por que isso é e é solucionável?

Na prática, esse problema surge quando estou fazendo grep -R em um diretório grande e minha pesquisa não é restrita o suficiente. Uma solução seria canalizar o resultado para wc primeiro para garantir que a saída não seja muito longa, mas esse é apenas mais um passo que 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: link
  • O atraso é maior se a janela do meu terminal for maior. Para um terminal de tela cheia, leva cerca de 15 segundos para parar grep -R (nenhum outro argumento) em um diretório inicial desordenado. Para um terminal de 80 × 25 caracteres, ele pára quase imediatamente.
por Snowball 02.08.2012 / 17:38

5 respostas

10

O tmux agora tem as seguintes opções:

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

Você pode definir valores para estes, o que tornará ^ C e amigos mais fáceis de digitar. Veja man tmux :

These two options configure a simple form of rate limiting for a pane. If tmux sees more than trigger C0 sequences that modify the screen (for example, carriage returns, linefeeds or backspaces) in one millisecond, it will stop updating the pane immediately and instead redraw it entirely every interval milliseconds. This helps to prevent fast output (such as yes(1)) overwhelming the terminal. The default is a trigger of 250 and an interval of 100. A trigger of zero disables the rate limiting.

    
por 22.04.2013 / 08:51
7

Você sempre pode emitir o comando kill-pane de dentro da sessão. Se o texto do terminal parecer lixo, renomear a janela e / ou emitir reset deve consertá-lo.

    
por 13.11.2012 / 19:16
4

Como tmux está se inserindo entre o processo cat e seu terminal, ele precisa ler a saída de cat , gravá-la no terminal e, ao mesmo tempo, ler sua entrada do terminal (o ^ C) e enviá-lo para o shell para interromper o comando. Eu não tenho certeza exatamente o que causa o atraso, mas é algo sobre como tmux buffers de E / S entre você e o shell que é executado em tmux .

    
por 02.08.2012 / 18:31
3

Supondo que você esteja usando o ssh em uma conexão de baixa latência, você tentou usar mosh ? Entre outras coisas muito interessantes, como predição de entrada, bem como desconexões sobreviventes e até mesmo um IP variável 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 o fluxo inteiro) .

Você pode usar tmux dentro de mosh sem problemas.

    
por 12.11.2012 / 21:37
1

Eu estava tendo este problema com o tmux 2.3. Tentei definir as opções de troca de intervalo de c0 e de mudança de c0 como descrito acima, mas elas não estão mais disponíveis. Aqui está a mudança do git com a nova tentativa de solução: link

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

    
por 29.06.2016 / 22:23

Tags