2016-06-28 7 views
0

완전히 새로운 주제는 아니지만 조금 이상한 상황이 발생했습니다.잠시 전에 완료 한 백그라운드 프로세스의 종료 코드 받기

백그라운드에서 스크립트를 실행하여 루프에서 약 1000 개의 파일을 처리 중입니다. 각 프로세스에서 반환하는 종료 코드를 기반으로 파일에 대해 몇 가지 작업을 수행하려고합니다. 각 프로세스가 완료 될 때까지 기다리는 루프에 들어가기 전에 프로세스 중 일부가 이미 완료되었음을 발견했습니다. pgrep가 프로세스를 찾고 단지 다른 프로세스가 성공적으로 완료되었다고 가정 할 때만 스크립트가 대기하도록 수정했습니다. 문제는 해당 파일에 대한 조치를 취하기 위해 각 프로세스의 종료 코드를 알아야한다는 것입니다. 어떤 아이디어?

pid_list=() for FILE in $SOME_FOLDER do (process with FILE as parameter) & done
for pid in "${pid_list[@]}" do if pgrep $pid; then #process could have just completed as we got here if wait $pid; then echo "process $pid successfully completed!" >> $logfile else echo "process $pid failed!" >> $logfile fnc_error_exit fi else echo "assumed that process $pid successfully completed but I DON'T KNOW THE EXIT CODE!" >> $logfile continue fi done

답변

0

나는 당신의 문제를 정확히 해결할 수 없다.

어쨌든 부모 스크립트와 하위 스크립트를 사용하여 다른 방법을 시도해 볼 수 있습니까? 예를 들어

는, 맨 위의 스크립트는 다음과 같이이다 : 다음

for FILE in $HOME/*.txt 
    do 
    parent.sh $FILE & 
    done 

의 parent.sh은 다음과 같이이다 :

grep -q hello $1 
:

child.sh $1 
    RC=$? 
    case $RC in 
    0) echo Exit code 0 for $1 >> parent.log 
    ;; 
    1) echo Exit code 1 for $1 >> parent.log 
    ;; 
    *) echo Other Exit code $RC for $1 >> parent.log 
    ;; 
    esac 

아이의 스크립트는 다음과 같다

그런 다음 parent.sh는 child.sh의 모든 종료 코드를 처리합니다.

모든 파일은 parent.sh에 의해 처리되며 누락 된 처리가 없습니다.