我在阅读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