shell中管道两边的进程是怎么通信的

shell中管道两边的进程是怎么通信的
     要执行一个简单命令 shell 首先复制自身,然后 shell 等待实际上执行命令的 subshell (子shell)完成,在 subshell 中做重定向和执行 exec 系统调用,用指定程序的代码段和数据段替代 shell 代码段和数据段,进程 id 等元信息不变。 
     管道线 a | b 执行:shell 创建一个管道,复制一个 subshell, 在其中把输出标准重定向到管道写端然后 exec a,shell 不等待这个 subshell 执行完成; shell 接着复制一个 subshell,在其中把标准输入重定向到管道读端然后 exec b, shell 等待它这个 subshell 完成。 
     在 (...) 方式执行命令时候涉及到进一步的进程复制,shell 在复制 subshell 之后不等待其完成;subshell 在执行除了最后一个命令之外所有命令的时候都复制一个 subsubshell,在其中做重定向和 exec, subshell 在自身中重定向和 exec 最后一个命令.                  如果管道由 subshell( exec a) 创建,那么subshell(exec b)就无法通过继承得到该管道描述符,从而进行重定向,那么只能使用使用named pipe了? 
from:linuxforum

你可能感兴趣的:(shell中管道两边的进程是怎么通信的)