2
说,例如,我们有如下的shell中执行:什么是进程树看起来像使用fork()?
ls | grep "abc" | wc
我了解一个子进程会从壳叉子和如何它的一个孩子,这样,
Shell (pid=12)
\
\
ls (pid=13)
但我不确定管道和尾随命令是如何适合的。他们是否也是壳的子,而不是ls
?
说,例如,我们有如下的shell中执行:什么是进程树看起来像使用fork()?
ls | grep "abc" | wc
我了解一个子进程会从壳叉子和如何它的一个孩子,这样,
Shell (pid=12)
\
\
ls (pid=13)
但我不确定管道和尾随命令是如何适合的。他们是否也是壳的子,而不是ls
?
管道的每个组件都将是shell的子进程。如果您使用pstree -p
从另一个终端,你可能会看到这样的内容:
...
sshd(11)---bash(12)-+-ls(13)
|-grep(14)
\-wc(15)
...
(!假设你可以同时您的管道仍在运行运行此)
但是请注意,所有的组件会形成单一的process group。
管道本身是Linux的一个功能(或者你正在使用的任何操作系统),它不是一个单独的用户进程。 shell创建一些anonymous pipes,并将它们连接到流水线中每对进程的相关文件描述符。
感谢您的帮助家伙! – 2013-03-03 21:46:37
您是否熟悉'pstree'工具? – 2013-03-03 21:22:38
对于OP:从[**这个代码**](http://www.ladweb.net/src/ladsh4.c.html)得到一个想法,shell是如何实际实现'|'运算符的。在代码中搜索这一行:'if(!(newJob.progs [i] .pid = fork()))然后你知道ls,grep,wc是shell的子进程...代码不是bash代码但Bash做类似.. – 2013-03-03 21:41:08