问题描述
使用像 ps aux |grep foobar
这样的典型命令,为什么 grep foobar
进程在输出中?
我认为 ps aux
输出被传递给 grep 以通过 grep 参数中的模式过滤行,但在您执行 ps aux
时 grep 仍未执行(至少我是这样假设,我肯定错了),稍后执行。
那么管道是如何工作的?
解决方法
原因很简单:
- 操作系统启动
grep
进程(作为管道目标)。
- 操作系统启动
ps
,发现 grep
正在运行。
- OS 将
ps
的标准输出连接到 grep
的标准输入。