나는 The TTY demystified을 읽습니다. 마지막 세 xterm
, bash
합니다 (xterm
의 아이), 그리고 다음 "잡스와 세션"섹션에서 xterm을 사용하여 사용자의 예제가있다 :bash 서브 쉘이 새로운`bash` 프로세스를 생성합니까?
$ cat
hello
hello
^Z
[1]+ Stopped cat
$ ls | sort
는 그리고 관련된 프로세스를 나열하는 테이블이 있습니다 프로세스 (cat
, ls
및 sort
)는 모두 동일한 PPID (부모 프로세스 ID)를 갖습니다. 이들은 모두 동일한 bash
프로세스의 하위 항목입니다.
이제 bash의 파이프 라인이 하위 쉘에서 실행된다는 것을 알고 있습니다. 나는 항상이 서브 쉘의 의미는 각 서브 쉘에 대해 여분의 bash
프로세스가 있음을 의미한다고 생각 해왔다. 내 질문은 : 다른 두 개의 bash
프로세스가 없어야하고, 첫 번째 bash
의 자식과 ls
의 자식이 모두 첫 번째 bash
의 자식이되고 sort
이 두 번째 bash
의 자식이 될까요? 기사의 표가 단순합니까? 아니면 하위 셸에 대한 이해가 잘못 되었습니까?
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). –