我在閱讀The TTY demystified。在「喬布斯和會話」一節中有使用的xterm用戶的例子:bash子shell是否會產生一個新的`bash`進程?
$ cat
hello
hello
^Z
[1]+ Stopped cat
$ ls | sort
而且還有一個表,列出涉及的過程:xterm
,bash
(該xterm
的孩子),以及最後三個進程(cat
,ls
和sort
)都具有相同的PPID(父進程ID) - 它們都是相同bash
進程的子進程。
現在,我知道在bash中的管道在subbells中執行。我一直認爲這個子shell的意思是每個子shell都有一個額外的bash
進程。我的問題是:不應該有另外兩個bash
進程,第一個子進程bash
,然後ls
將是第一個子進程bash
,並且sort
將是第二個子進程bash
?文章中的表格是簡化的,還是我對subshell的理解是錯誤的?
Bash的行爲是可配置的;用默認設置(尤其是'管道......在子殼中執行'不準確),你的普遍性並不完全準確。參見['PIPESTATUS'](http://www.gnu.org/software/bash/manual/bash.html#Bash-Variables)和['shopt -s lastpipe'](http://www.gnu.org /software/bash/manual/bash.html#The-Shopt-Builtin)和['set -o pipefail'](http://www.gnu.org/software/bash/manual/bash.html#The-Set -Builtin)。 – 2014-12-27 21:42:21