백그라운드 작업과 포그라운드 작업 및 병렬 실행 작업 비교

백그라운드 작업과 포그라운드 작업 및 병렬 실행 작업 비교

저는 Linux를 처음 접했기 때문에 올바른 용어를 사용하지 않았다면 사과드립니다.

여러 작업을 병렬로 실행하려고 합니다(백그라운드 셸 연산자 사용). 그러나 먼저 두 작업을 병렬로 실행한 다음 (완료 후에만) 처음 두 작업의 결과에 따라 나머지 작업을 실행해야 합니다.

예를 들어, 작업 A.1및 가 A.2병렬로 실행될 수 있고(그들 사이에 종속성 없음) 작업 및 에서 사용할 일부 파일을 생성할 수 있다고 B.1가정 B.2합니다 B.3. 모든 B작업은 독립적이지만 파일을 보기 전에는 시작 A.1하거나 완료할 수 없습니다. A.2이를 염두에 두고 다음과 같은 쉘 스크립트를 생각해 냈습니다.

script1다음 줄이 있습니다.

./A.1 & 
./A.2 &

script2다음 줄이 있습니다.

./B.1 &
./B.2 &
./B.3 &

script3다음과 같이 스크립트 1과 2를 순서대로(즉, &연산자를 사용하지 않고) 호출하면 됩니다.

./script1
./script2

script3내가 찾고 있는 것이 맞는지 잘 모르겠습니다 . 내가 옳은 일을 하고 있는 걸까? 즉, 완료될 script2때까지 기다렸다가 시작하시겠습니까?script1

답변1

아니요, 원하는 효과를 얻을 수 없습니다. 하지만 실제로는 그보다 더 간단합니다.

첫째, 간단한 수준에서는 귀하의 분석이 정확합니다. script3만약

./script1
./script2

그렇다면, 완료될 때 script3까지 기다린 script1후 시작하겠습니다 script2. 문제는 script1기본적으로 즉시 "완료"된다는 것입니다. 즉, 두 개의 프로세스를 생성하는 데 걸리는 시간이므로 명령이 계속 실행되는 동안 명령 A이 시작됩니다 . 당신이 원하는 것이 아닙니다.BA

해결책은

./A.1 &
./A.2 &
wait
./B.1 &
./B.2 &
./B.3 &

wait명령(이름에서 알 수 있듯이)은 계속하기 전에 기존 비동기 프로세스가 종료될 때까지 기다립니다.

wait명령은 프로세스를 생성한 동일한 쉘에서 실행되어야 합니다 A. 6개 명령을 모두 하나의 스크립트에 넣거나, 처음 3개 명령을 하나의 스크립트에 넣거나, 마지막 3개 명령을 다른 스크립트에 넣거나, 기타 다양한 조합을 넣을 수 있습니다.

또한 명령 다음에 작업을 wait수행 할 수도 있습니다.B

관련 정보