比如说,我们在shell中执行了以下操作:
ls | grep "abc" | wc
我理解子进程如何从shell中派生出来以及它是一个孩子,就像这样,
Shell (pid=12)
\
\
ls (pid=13)
但是我不确定管道和尾随命令是如何适应的。它们也是shell的子项,而不是ls
吗?
答案 0 :(得分:2)
管道的每个组件都是shell的子进程。如果您使用其他终端的pstree -p
,您可能会看到如下内容:
...
sshd(11)---bash(12)-+-ls(13)
|-grep(14)
\-wc(15)
...
(假设你可以在你的管道仍在运行的情况下运行它!)
但请注意,所有组件都会形成一个process group。
管道本身是Linux(或您正在使用的任何操作系统)的一项功能,它不是一个单独的用户进程。 shell创建了一些anonymous pipes,并将它们连接到管道中每对进程的相关文件描述符。