ps 传输到 grep 的时间

Max*_*ams 7 grep bash pipe

所以,这不是问题本身,只是我很好奇的事情。我正在使用从 Debian 分支出来的 Linux Mint MATE。如果我做:

ps afx  | grep abcdefg
Run Code Online (Sandbox Code Playgroud)

我得到:

16599 pts/3    S+     0:00  |   \_ grep --color=auto abcdefg
Run Code Online (Sandbox Code Playgroud)

因此,它显示了grep 的过程。但是,这之后ps管道中:我本来以为上面做的ps,得到的结果,然后将它们传送到grep。那么为什么grep实际上出现在ps结果中呢?以后不就这样了吗?我想我遗漏了一些关于管道实际作用的基本知识。

hay*_*lem 4

这个问题是重复的,属于 unix.stackexchange.com。

总而言之,OpenGroup 的Shell 命令语言文档在有关“管道”的细节上相对模糊:

管道是由控制运算符“|”分隔的一个或多个命令的序列。除最后一个命令之外的所有命令的标准输出都应连接到下一个命令的标准输入。

管道的格式为:

[!] command1 [ | command2 ...]
Run Code Online (Sandbox Code Playgroud)

命令1的标准输出应连接到命令2的标准输入。命令的标准输入、标准输出或两者应被视为由管道在作为命令一部分的重定向运算符指定的任何重定向之前分配(请参阅重定向)。

如果管道不在后台(请参阅异步列表),则 shell 应等待管道中指定的最后一个命令完成,也可能等待所有命令完成。

请注意,虽然数据在管道中明显从“左到右”流动,但无法保证调度本身。

也可以看看: