管道線 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


