서브쉘은 기본적으로 병렬로 실행되나요?

서브쉘은 기본적으로 병렬로 실행되나요?

이 문제는 다음에서 비롯됩니다.이것답변 중 하나에 대해 읽기를 권장합니다.Linuxtopia - 20장. 서브쉘.

나는 Linuxtopia 웹사이트의 다음 진술에 약간 혼란스러워합니다:

서브셸을 사용하면 스크립트를 병렬로 처리할 수 있으며 기본적으로 여러 하위 작업을 동시에 실행할 수 있습니다.
https://www.linuxtopia.org/online_books/advanced_bash_scripting_guide/subshells.html

이것은 스크립트에서 실행되는 하위 쉘이 항상 원래 스크립트와 병렬로 실행된다는 것을 의미합니까? 실험적으로는 그렇지 않은 것 같습니다만, 전문가의 확인을 부탁드립니다.

#! /usr/bin/bash

# This script reliably prints:
# hello
# world
# 0
# ...implying that the the subshell is not run in parallel with this script.

(echo hello;
echo world)

echo $?

.

#! /usr/bin/bash

# This script prints:
# 0
# hello
# world
# ...implying that the the subshell is run in parallel with this script.

(echo hello;
echo world) &

echo $?

Linuxtopia 웹사이트를 사용하는 &것은 "[Let] 스크립트가 병렬로 처리됩니다."?


참고: 저는 &bash의 postfix 명령 개념에 익숙합니다. bash는 해당 명령을 백그라운드 프로세스로 실행합니다. 그래서 내 질문은 서브 쉘에서 실행되는 명령이 백그라운드/병렬 프로세스로 실행되는지 여부에 관한 것입니다.기본적으로또는 여기에 추가하면 &백그라운드/병렬 실행이 발생하는 경우도 있습니다. 나에게 Linuxtopia 기사의 표현은 전자를 암시하지만 이는 관찰과 일치하지 않는 것 같습니다.

답변1

서브쉘을 생성하는 방법에 따라 다릅니다.

( command )서브셸에서 실행되고 command계속하기 전에 서브셸이 완료될 때까지 기다립니다.

command &command백그라운드의 서브쉘에서 실행됩니다. 쉘은 서브쉘이 완료될 때까지 기다리지 않고 다음 명령을 계속 실행합니다. 이는 병렬 처리에 사용될 수 있습니다.

coproc command와 유사 command &하지만 기본 셸과 하위 셸 사이에 양방향 파이프도 설정합니다.

관련 정보