스크립트에서 시작된 모든 하위 프로세스가 종료되었는지 어떻게 감지합니까?

스크립트에서 시작된 모든 하위 프로세스가 종료되었는지 어떻게 감지합니까?

루프를 사용하여 여러 명령을 병렬로 실행하고 싶습니다 for. 각 명령에는 다소 시간이 걸릴 수 있으며 스크립트 끝에서 다른 명령을 호출하고 싶습니다. 다음은 최소한의 예입니다.

#!/bin/bash

function test {
    length=$1
    sleep $length

    echo "$length"
    echo "-----"
}

# http://www.cyberciti.biz/faq/bash-for-loop-array/    
array=( 5 1 3 )

for time in "${array[@]}"
do
    test $time &
done

결과는 다음과 같습니다.

$ bash ~/test.sh && echo "OK"
OK
$ 1
-----
3
-----
5
-----

보시다시피 OK스크립트가 끝나기 전에 표시됩니다. 이는 test백그라운드에서 호출하기 때문에 논리적입니다. 마지막 호출은 다른 호출보다 먼저 끝날 수 있기 때문에 테스트를 추가 &할 수 없습니다 . 백그라운드 호출의 모든 인스턴스가 종료된 후에만 test스크립트를 종료하고 싶습니다 .test

이것이 내가 얻으려는 결과입니다.

$ bash ~/test.sh && echo "OK"
1
-----
3
-----
5
-----
OK
$ 

이 출력을 어떻게 얻을 수 있습니까?

답변1

당신은해야합니다기다리다루프를 수행한 후 for현재 활성화된 모든 하위 프로세스를 기다립니다.

for time in "${array[@]}"
do
    test "$time" &
done

wait

관련 정보