2

比如说,我们在 shell 中执行了以下命令:

ls | grep "abc" | wc

我了解子进程如何从外壳分叉以及它的子进程如何,像这样,

Shell (pid=12)
       \
        \
         ls (pid=13)

但我不确定管道和尾随命令如何适应。它们也是外壳的孩子,而不是ls

4

1 回答 1

2

管道的每个组件都将是 shell 的一个子进程。如果您pstree -p从另一个终端使用,您可能会看到如下内容:

...
sshd(11)---bash(12)-+-ls(13)
                    |-grep(14)
                    \-wc(15)
...

(假设您可以在管道仍在运行时运行它!)

但是,请注意,所有组件都将形成一个进程组

管道本身是 Linux(或您正在使用的任何操作系统)的一个特性,它不是一个单独的用户进程。shell 创建一些匿名管道,并将它们连接到管道中每对进程的相关文件描述符。

于 2013-03-03T21:30:57.220 回答