« Pourquoi les tuyaux sont par... Note

« Pourquoi les tuyaux sont parfois « bloqués » : le tamponnage »

"Le tamponnage est courant dans les programmes de terminal pour améliorer les performances en regroupant la sortie jusqu'à ce qu'un certain seuil de taille soit atteint. Cela peut causer des problèmes lorsque les données sont ajoutées lentement à un tube, car les programmes peuvent tamponner leur sortie et jamais l'écrire.Grep et des programmes similaires utilisent par défaut le tamponnage par blocs lors de l'écriture dans des tubes, mais utilisent le tamponnage par lignes lors de l'écriture dans les terminaux, ce qui explique pourquoi la commande "tail -f /some/log/file | grep thing1 | grep thing2" peut ne pas afficher de sortie.Plusieurs commandes tamponnent leur sortie, y compris grep, sed, awk, tcpdump et jq, tandis que les commandes comme tail, cat et tee ne le font pas.Les langages de programmation comme C, Python, Ruby et Perl peuvent également tamponner la sortie, avec diverses méthodes pour désactiver le tamponnage.Lorsque Ctrl-C est pressé sur un tube, le buffer de sortie du programme peut être perdu, car le signal est reçu avant que le buffer ne puisse être vidé.Le tamponnage se produit également lors de la redirection vers un fichier, mais il se comporte généralement comme attendu, avec le contenu du buffer étant écrit avant que le programme ne se termine.Pour éviter le tamponnage, on peut exécuter un programme qui se termine rapidement, utiliser le drapeau "--line-buffered" avec grep, réécrire la commande en utilisant awk, utiliser stdbuf, ou utiliser unbuffer pour forcer le programme à se comporter comme s'il écrivait dans un terminal.La solution idéale dépend de la situation spécifique, avec unbuffer étant un choix fiable pour son comportement cohérent.Bien que le tamponnage ne soit généralement pas un problème courant, il peut survenir lorsque les données sont ajoutées lentement à un tube. Une variable d'environnement pour désactiver le tamponnage pourrait être utile, mais sa conception et sa mise en œuvre présentent des défis."