tmux tarde à interrompre le processus avec Ctrl-C

25

Si j'exécute une commande avec beaucoup de sortie dans tmux, mais décide de l'annuler avec Ctrl-C, il y a un décalage de 10 à 15 secondes avant qu'il ne s'arrête. Cependant, si je fais la même chose en dehors de tmux, cela s'arrête immédiatement. Pourquoi est-ce et est-il réparable?

En pratique, ce problème survient lorsque je fais grep -Rsur un grand répertoire et que ma recherche n'est pas assez contrainte. Une solution de contournement serait de diriger le résultat vers le wcpremier pour vous assurer que la sortie n'est pas trop longue, mais ce n'est qu'une autre étape que j'aimerais éviter.


Remarques:

  • Cela a le même comportement dans Gnome Terminal, uxterm, st et un simple terminal virtuel (par exemple, ctrl-alt-f2), mais le délai est moindre dans le terminal virtuel simple.
  • Je ne suis pas le seul: http://www.mail-archive.com/[email protected]/msg01569.html
  • Le délai est plus long si ma fenêtre de terminal est plus grande. Pour un terminal plein écran, il faut environ 15 secondes pour s'arrêter grep -R(aucun autre argument) dans un répertoire personnel encombré. Pour un terminal de 80 × 25 caractères, il s'arrête presque immédiatement.
Boule de neige
la source
Je ne remarque aucune différence perceptible. J'ai essayé grep -R "a" ~/(pas d'écrire dans un fichier) ... et yes | nl | cut -f1 | head -9999999 > ~/filepuis cat ~/file.
Peter.O
@ Peter.O Entrez simplement "oui" puis appuyez sur Entrée, votre tmux est condamné.
solotim

Réponses:

10

tmux dispose désormais des options suivantes:

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

Vous pouvez définir des valeurs pour celles-ci, ce qui facilitera la saisie de ^ C et de ses amis. Voir man tmux:

Ces deux options configurent une forme simple de limitation de débit pour un volet. Si tmux voit plus que déclencher des séquences C0 qui modifient l'écran (par exemple, les retours chariot, les sauts de ligne ou les espaces arrière) en une milliseconde, il cessera immédiatement de mettre à jour le volet et le redessinera entièrement à chaque intervalle de millisecondes. Cela permet d'éviter que la sortie rapide (comme oui (1)) ne submerge le terminal. La valeur par défaut est un déclencheur de 250 et un intervalle de 100. Un déclencheur de zéro désactive la limitation de débit.

ThomasAdam
la source
Cela devrait être la solution acceptée, car cela fonctionne.
polym
2
Par exemple setw -g c0-change-trigger 10 setw -g c0-change-interval 250>> ~ / .tmux.conf
DmitrySandalov
2
J'ai essayé ces derniers sur tmux 2.3 et ils n'ont pas été reconnus. Il devient totalement inutilisable lorsque les commandes génèrent beaucoup de sortie.
IJT
1
Depuis Tmux 2.1, ces options n'existent plus selon raw.githubusercontent.com/tmux/tmux/2.6/CHANGES Les options c0- * de limitation de débit ont été supprimées. Au lieu de cela, une approche d'interruption est utilisée.
megar
7

Vous pouvez toujours émettre une kill-panecommande à partir de la session. Si le texte du terminal ressemble à des ordures, renommer la fenêtre et / ou émettre resetdevrait le corriger.

lukaszkorecki
la source
4

Puisqu'il tmuxs'insère entre le catprocessus et votre terminal, il doit lire la sortie de cat, l'écrire sur le terminal, et en même temps lire votre entrée depuis le terminal (le ^ C) et l'envoyer au shell pour interrompre la commander. Je ne sais pas exactement ce qui cause le retard, mais c'est quelque chose sur la façon dont les tmuxE / S tampons entre vous et le shell qui s'exécute tmux.

chepner
la source
3

En supposant que vous utilisez ssh sur une connexion à faible latence, avez-vous essayé d'utiliser mosh ? Entre autres choses très intéressantes comme la prédiction d'entrée ainsi que les déconnexions survivantes et même un changement d'adresse IP du côté client, cela améliore également spécifiquement le temps de réaction lors de l'utilisation de Ctrl-C (en ne mettant à jour le contenu du terminal que périodiquement au lieu d'envoyer le flux entier) .

Vous pouvez utiliser à l' tmuxintérieur moshsans aucun problème.

Julien Oster
la source
Curieusement, cela se produit lorsque je travaille localement. mosh a l' air plutôt soigné, cependant.
Snowball
1

J'avais ce problème avec tmux 2.3. J'ai essayé de définir les options c0-change-interval et c0-change-trigger comme décrit ci-dessus, mais elles ne sont plus disponibles. Voici le changement de git avec la nouvelle solution tentée: https://github.com/tmux/tmux/commit/3f4ee98162cd5bb7000f93fec0e631e123b1281d

Revenir à tmux 1.8 a résolu le problème pour moi sans avoir à définir d'options.

ijt
la source
Ils semblent essayer de résoudre ce problème plutôt que d'utiliser la solution de contournement, de sorte que les versions plus récentes devraient améliorer encore la sortie. github.com/tmux/tmux/issues/849
dragon788