3

在 K&P 的《Unix 编程环境》中写道:
“管道中的程序实际上是同时运行的,而不是一个接一个。
这意味着管道中的程序可以是交互式的;”

程序如何同时运行?
例如:$ 谁 | grep 玛丽 | wc -l
grep mary 将如何执行直到谁运行或者 wc -l 将如何执行直到它知道先前程序的结果?

4

1 回答 1

7
  • 所有三个程序都将启动。grep 和 wc 等待通过标准输入的输入
  • who将输出一行数据,grep然后接收
  • 如果该行匹配,grep 会将其写入stdoutwc然后读取并计数
  • 同时,也可能一直在为etcwho写出更多数据grep

每个程序都需要前一个程序的结果,但它不需要所有的结果才能开始工作,这就是流水线可行的原因。

于 2010-04-15T09:36:45.690 回答