2016-06-28 11 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

私は正確にあなたの問題を解決することはできません。

私はあなたの正確な状況を知らないので、とにかく親スクリプトと子スクリプトを使用して別の方法を試すことができますか?

例えば、一番上のスクリプトは次のようにされています。その後、parent.shはこのようなものです

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

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によって処理されますが、処理はありません。

関連する問題