例如,我们在 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/