이 문제는 다음에서 비롯됩니다.이것답변 중 하나에 대해 읽기를 권장합니다.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 &
하지만 기본 셸과 하위 셸 사이에 양방향 파이프도 설정합니다.