2016-06-28 4 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 как это:

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 

Ребенок сценарий выглядит так:

grep -q hello $1 

Затем parent.sh будет обрабатывать каждый код выхода child.sh

Все файлы будут обрабатываться с помощью parent.sh без обработки.