我很难理解以下命令的效果:
yes | tee hello | head
在我的笔记本电脑上,'hello' 中的行数约为 36000 行,远高于标准输出上显示的 10 行。
我的问题是:
什么时候
yes
,更一般地说,管道中的命令停止?为什么上面两个数字不匹配。是不是因为
tee
没有将这些行逐一传递给管道中的下一个命令?
我很难理解以下命令的效果:
yes | tee hello | head
在我的笔记本电脑上,'hello' 中的行数约为 36000 行,远高于标准输出上显示的 10 行。
我的问题是:
什么时候yes
,更一般地说,管道中的命令停止?
为什么上面两个数字不匹配。是不是因为tee
没有将这些行逐一传递给管道中的下一个命令?
来自
man 2 write
:所以进程从右到左死亡。
head
自行退出,在退出tee
后第一次尝试写入管道时被杀死head
。死后也是如此yes
。tee
tee
可以写入管道,直到缓冲区已满。但它可以尽可能多地写入文件。似乎我的版本tee
将相同的块写入stdout
文件。head
在其(即内核的)读取缓冲区中有 8K。它会读取所有内容,但只打印前 10 行,因为这是它的工作。当管道读取器终止时,写入管道的程序将收到一个SIGPIPE信号,只要其标准输入保持打开状态, tee(1) 就不会终止。
head(1) 默认输出 10 行。