c - 使用 Fork() 时的进程树是什么样的?

标签 c fork conceptual

例如,我们在 shell 中执行以下命令:

ls | grep "abc" | wc

我了解子进程如何从 shell 中 fork 以及它如何成为子进程,就像这样,

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

但我不确定管道和尾随命令如何适应。它们也是 shell 的子级,而不是 ls 吗?

最佳答案

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

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

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

但是,请注意,所有组件将形成一个 process group .

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

关于c - 使用 Fork() 时的进程树是什么样的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15191048/

相关文章:

C 中的 CreateProcess 关闭控制台太快

c++ - 如果我们从某个地址开始,我们如何确定变量在整个程序中占用的地址?

c - 数学运算麻烦

c - 使用 isalpha() 在文件中跳过一行

创建两个子进程完成奇偶级数求和

c - c语言的多线程客户端-服务器聊天应用程序

c - 当我们在c中使用fork时,进程之间是否共享数据?

c - 使用循环来知道“对象在 c 中何时过去

Java 最佳实践 new 与 .create()

java - 子类和父类中的方法重写可以有不同数量的参数?参数数量可以不同吗?