为什么管道有时会“卡住”:缓冲

2024-11-29

本文解释了为什么在终端使用管道命令时,有时会没有输出。原因是很多程序会缓冲输出数据,例如 grep 默认会缓冲 8KB 数据才输出,当输出到管道时,如果匹配的数据量不足 8KB,就不会有任何输出。文章列举了一些常用命令(grep、sed、awk、tcpdump、jq、tr 等)的缓冲机制以及如何禁用缓冲的标志,并提供了几种避免缓冲的解决方案:使用快速完成的命令、使用禁用缓冲的标志、使用 awk、使用 stdbuf 或 unbuffer。文章还讨论了编程语言中的缓冲机制以及如何禁用缓冲。最后,文章提出了一些改进缓冲机制的建议,例如设置环境变量来禁用缓冲。

6
未分类 缓冲