하위 프로세스 중 하나가 코드! = 0로 끝나는 경우 해당 스크립트에서 생성 된 여러 하위 프로세스가 종료 코드! = 0을 반환하도록 bash 스크립트에서 대기하는 방법
간단한 스크립트 :
#!/bin/bash
for i in `seq 0 9`; do
doCalculations $i &
done
wait
위의 스크립트는 생성 된 10 개의 하위 프로세스를 모두 기다리지 만 종료 상태는 항상 0입니다 (참조 help wait
). 이 스크립트를 수정하여 생성 된 하위 프로세스의 종료 상태를 발견하고 하위 프로세스 중 하나가 코드! = 0으로 끝나면 종료 코드 1을 반환하도록하려면 어떻게해야합니까?
서브 프로세스의 PID를 수집하는 것보다 더 나은 해결책이 있습니까? 순서대로 기다렸다가 종료 상태를 합산합니까?
wait -n
에는 하나의 작은 문제가 있습니다. 남아있는 자식 작업이없는 경우 (일명 경쟁 조건) 실패한 자식 프로세스와 구별 할 수없는 0이 아닌 종료 상태 (실패)를 반환합니다.
wait -n
현대 bash에서는 첫 번째 / 다음 명령이 완료되었을 때만 반환되도록 사용할 수 있도록 터치하여 크게 향상시킬 수 있습니다 .