프로세스 대체 명령이 서브쉘에서 호출됩니까?

프로세스 대체 명령이 서브쉘에서 호출됩니까?

배쉬 매뉴얼에서

프로세스 대체지원되는 시스템에서 지원됨명명된 파이프 (fifos) 또는 /dev/fd파일을 여는 명명된 방법입니다. 형태를 취합니다

<(list)

또는

>(list)

프로세스 목록의 입력 또는 출력은 fifo 또는 에 연결됩니다 /dev/fd. 파일 이름은 확장 결과로 현재 명령에 인수로 전달됩니다.

명령이 list프로세스 대체에서 호출됩니까, <(list)아니면 >(list)명령 대체, 대괄호 그룹 명령 및 비동기 명령과 같은 하위 쉘에서 호출됩니까? bash 매뉴얼에서 말하는 것과 유사합니다.

명령 대체, 괄호로 묶인 명령 및 비동기 명령은 다음과 같습니다.서브쉘 환경에서 호출됨이는 쉘이 포착한 트랩이 호출 시 쉘이 상위 쉘로부터 상속받은 값으로 재설정된다는 점을 제외하면 쉘 환경의 사본입니다.

  1. 대답은 아마도 '예'일 것입니다. 왜냐하면

    • 프로세스 대체는 명령 대체와 유사합니다.

    • 일부 출처설명하다

      여기에 포함된 명령은 백그라운드에서 실행됩니다.

    위 bash 매뉴얼의 두 번째 문장은 명령 대체 및 백그라운드 명령이 서브쉘에서 호출된다는 것을 의미합니다.

  2. 대답은 아마도 '아니요'일 것입니다. 왜냐하면

    • Bash 매뉴얼에서는 위의 Bash 매뉴얼에서 두 번째 인용문에 언급된 프로세스 대체를 볼 수 없습니다.

    • 그리고일부 출처프로세스 대체에 대해 이야기

      파이프 우회로 인해 발생하는 서브쉘에 특히 중요합니다.

      "서브쉘 우회"가 서브쉘을 호출하지 않는다는 의미인지는 확실하지 않습니다.

답변1

현재 쉘을 실행 strace(1)한 후 실행하면 다음이 <(command)제공됩니다.

클론(child_stack = 0, 플래그 = CLONE_CHILD_CLEARTID | CLONE_CHILD_SETTID | SIGCHLD, child_tidptr = 0x7fa6713d59d0) = 13305

순전히 정의적인 관점에서 보면,클론(2)~로써 정의 된

자식 프로세스 만들기

그리고서브쉘~처럼

쉘 스크립트를 실행하면 서브쉘이라는 새로운 프로세스가 시작됩니다.

예라고 말할 수도 있습니다. 실행 중인 프로세스는 하위 쉘이 호출될 때 교체됩니다.

관련 정보