unix管道正在流媒体?

时间:2017-06-07 16:57:53

标签: unix stream pipe gzip

zcat big.txt.gz | split -l 1000000 - prefix

其中big.txt.gz为150 GB,说它有〜10亿行。

在这种情况下,unix管道是否会将数据“流式”分割,或者zcat操作是否已完成,之后会执行split

我不清楚other pages上面的命令是否会崩溃,因为它在执行拆分之前无法保存管道缓冲区中的所有枪械数据,或者如果枪杀数据将被“流式传输”到split

一般来说,unix pipe的流媒体行为还不清楚 - 在将输入输入到下一个命令stdin之前,管道何时等待所有先前的操作完成?

例如,如果我要连接多个命令,是否会由于内存不足而崩溃? e.g。

zcat big.txt.gz | tr 'a' 'b' | sed 's/foo/bar/g' | grep 'hello'

1 个答案:

答案 0 :(得分:4)

  

管道容量有限。 [...]应用程序不应该依赖于特定的容量:应该设计一个应用程序,以便读取过程一旦可用就会消耗数据,这样写入过程就不会被阻止。

我不确定为什么在这里有任何疑问:进程同时运行,上游进程正在写入,而下游进程正在读取。或者至少这是本手册页特别要求的理想。

现在,在执行任何操作之前,给定命令可能会尝试吸入其所有输入,并且输入太大可能会导致该命令崩溃。但这与管道缓冲区溢出的情况非常不同。