要执行一个简单命令 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
posted on 2010-02-13 23:42
chatler 阅读(678)
评论(0) 编辑 收藏 引用 所属分类:
Shell