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 -R
sur 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 wc
premier 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.
grep -R "a" ~/
(pas d'écrire dans un fichier) ... etyes | nl | cut -f1 | head -9999999 > ~/file
puiscat ~/file
.Réponses:
tmux dispose désormais des options suivantes:
Vous pouvez définir des valeurs pour celles-ci, ce qui facilitera la saisie de ^ C et de ses amis. Voir
man tmux
:la source
setw -g c0-change-trigger 10
setw -g c0-change-interval 250
>> ~ / .tmux.confVous pouvez toujours émettre une
kill-pane
commande à partir de la session. Si le texte du terminal ressemble à des ordures, renommer la fenêtre et / ou émettrereset
devrait le corriger.la source
Puisqu'il
tmux
s'insère entre lecat
processus et votre terminal, il doit lire la sortie decat
, 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 lestmux
E / S tampons entre vous et le shell qui s'exécutetmux
.la source
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'
tmux
intérieurmosh
sans aucun problème.la source
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.
la source