43 votes

Y a-t-il un moyen d'empêcher tmux de geler lorsque beaucoup de texte est affiché dans le terminal?

Dans une session tmux à l'intérieur de xterm, lorsque un programme génère beaucoup de sortie (comme un cat very_long_file), toute la session est gelée pendant un certain temps. Même si j'appuie sur Ctrl-C, rien n'est interrompu. Apparemment, tmux est gelé et ne transmet pas le signal Ctrl-C au programme qui génère la sortie. Y a-t-il un moyen d'empêcher cela.

20voto

Jack O'Connor Points 341

Je rencontre toujours ce problème dans tmux 1.6-2 sur Ubuntu 12.10. Une solution de contournement que j'ai trouvée est de détacher de la session (préfixe+d) puis de se rattacher (tmux attach, bon candidat pour un alias shell rapide). Il semble que tmux est effectivement réactif sous-jacent---vous pouvez confirmer que votre processus est réellement tué immédiatement avec ctrl-c---c'est juste le dessin qui bloque. La détache fonctionne immédiatement, et lorsque vous vous rattachez, le dessin aura sauté à la fin.

15voto

Chris F Points 1955

La solution correcte est de regarder les options c0-* de tmux pour essayer de limiter le débit de sortie. La raison pour laquelle ce problème existe est que les données sont envoyées au terminal plus rapidement qu'il ne peut les afficher, donc la limitation du débit est la seule solution.

6voto

ken Points 2086

D'après ce que je sais, il n'y a pas moyen de l'empêcher dans les versions actuelles, mais certains travaux sont en cours. Vous pouvez trouver quelques correctifs sur la liste de diffusion de tmux http://thread.gmane.org/gmane.comp.terminal-emulators.tmux.user/2689.

Un bon mot-clé pour rechercher sur le web est "flow control".

5voto

user2683246 Points 291

La réponse https://superuser.com/a/589896/311481 fonctionne bien. J'utilise les valeurs suivantes :

setw -g c0-change-trigger 10
setw -g c0-change-interval 250

Autre conseil : si vous utilisez ssh dans tmux, utilisez mosh à la place : http://mosh.mit.edu/. Il se comporte de manière plus intelligente pour afficher la sortie des programmes. Il essaie d'afficher le dernier état de l'écran en supprimant les intermédiaires lorsque c'est approprié. Ainsi, tmux ne se bloquera jamais si beaucoup de sortie est générée dans ses fenêtres avec des sessions mosh à l'intérieur.

Contrairement à SSH, le protocole basé sur UDP de mosh gère la perte de paquets de manière élégante et ajuste le taux d'images en fonction des conditions du réseau. Mosh ne remplit pas les tampons réseau, donc Control-C fonctionne toujours pour arrêter un processus en fuite.

Étant donné que SSP [State Synchronization Protocol utilisé par mosh] fonctionne au niveau de l'objet et peut contrôler le taux de synchronisation (c'est-à-dire le taux d'images), il n'a pas besoin d'envoyer chaque octet reçu de l'application. Cela signifie que Mosh peut réguler les images pour ne pas remplir les tampons réseau, conservant la réactivité de la connexion et garantissant que Control-C fonctionne toujours rapidement. Les protocoles qui doivent envoyer chaque octet ne peuvent pas faire cela.

5voto

gospes Points 336

Malheureusement, les options c0-* pour le contrôle du débit ont été supprimées à partir de la version 2.1 de tmux (journal des modifications). Autant que je sache, la seule façon de personnaliser le contrôle du débit est de mettre à jour les variables qui influencent dans le code source (tmux.h):

"READ_SIZE est la taille maximale des données à conserver à partir d'un pty (le seuil haut de l'événement). READ_BACKOFF est la quantité de données en attente d'être sortie vers un tty avant que les lectures de pty soient ralenties. READ_TIME est la durée de la pause avant la lecture suivante (en microsecondes) si un tty est supérieur à READ_BACKOFF."

Où vous trouverez les valeurs par défaut: (à partir de tmux v2.2):

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X