要執(zhí)行一個(gè)簡(jiǎn)單命令 shell 首先復(fù)制自身,然后 shell 等待實(shí)際上執(zhí)行命令的 subshell (子shell)完成,在 subshell 中做重定向和執(zhí)行 exec 系統(tǒng)調(diào)用,用指定程序的代碼段和數(shù)據(jù)段替代 shell 代碼段和數(shù)據(jù)段,進(jìn)程 id 等元信息不變。
管道線 a | b 執(zhí)行:shell 創(chuàng)建一個(gè)管道,復(fù)制一個(gè) subshell, 在其中把輸出標(biāo)準(zhǔn)重定向到管道寫端然后 exec a,shell 不等待這個(gè) subshell 執(zhí)行完成; shell 接著復(fù)制一個(gè) subshell,在其中把標(biāo)準(zhǔn)輸入重定向到管道讀端然后 exec b, shell 等待它這個(gè) subshell 完成。
在 (...) 方式執(zhí)行命令時(shí)候涉及到進(jìn)一步的進(jìn)程復(fù)制,shell 在復(fù)制 subshell 之后不等待其完成;subshell 在執(zhí)行除了最后一個(gè)命令之外所有命令的時(shí)候都復(fù)制一個(gè) subsubshell,在其中做重定向和 exec, subshell 在自身中重定向和 exec 最后一個(gè)命令. 如果管道由 subshell( exec a) 創(chuàng)建,那么subshell(exec b)就無(wú)法通過(guò)繼承得到該管道描述符,從而進(jìn)行重定向,那么只能使用使用named pipe了?
from:linuxforum
posted on 2010-02-13 23:42
chatler 閱讀(703)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
Shell