在UNIX中管道存疑

Hap*_*tal 3 unix piping

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

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

Jon*_*eet 7

  • 这三个程序都将启动.grep和wc等待通过stdin输入
  • who将输出一行数据,grep然后接收
  • 如果行匹配,grep会将其写入stdout,wc然后读取并计数
  • 同时,who也可能已经写出了更多的数据grep

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