为什么没有填满缓冲区?

为什么没有填满缓冲区?

假设我做了类似的事情yes | apt-get install foo。我知道这yes会不停地将一堆 打印y\n到标准输出。但apt-get只能处理其中的几个。为什么没有yes填满缓冲区?它实际上只y\n在 请求时才打印 吗apt-get

答案1

注意:这不是一个完整的答案,但我将其保留在这里,主要是因为下面有很好的评论。

y\n它实际上是否仅在请求时才打印apt-get

是的。管道的右侧工作时,左侧正在产生输出。此外,除非需要,否则左侧不会进入“完成”状态。例如,以下将创建一个无限循环,写入终端直到被终止。

while true; do echo foo; done

但是,下面将打印出 10 行,然后正常退出。

while true; do echo foo; done | head

一旦head命令完成,管道的左侧就不再需要工作,并且不再存在“无限”循环。

相关内容