У меня есть небольшой скрипт, abc.ksh, который принимает 3 параметра, например abc.ksh $ {a} $ {b} $ {c}
Я буду читать из конфигурационного файла с 'n' no of entires, и я буду выполнять abc.ksh 'n' раз параллельно, используя цикл for. Например
export pids=() for file in `cat config.txt` do a=`echo ${file}|awk -F"|" '{ print $1 }'` b=`echo ${file}|awk -F"|" '{ print $2 }'` c=`echo ${file}|awk -F"|" '{ print $3 }'` nohup ksh abc.ksh ${a} ${b} ${c} & pids+=("$!") done
Затем мне нужно проверить завершение каждого задания (на основе pid) и выполнить следующий элемент действия для этого конкретного задания. Например
export cnt=0 while[ $cnt -eq `wc -l config.txt`]; do export tmp=() for p in ${pids[*]}; do if[[ ! -d /proc/${p} ]]; then wait ${p} echo "Process completed with Process ID ${p}; exit code: $?" if [[ $? -eq 0 ]]; then cnt=`expr $cnt + 1` ***<Need to get the executed command " nohup ksh abc.ksh {a} {b} {c}" for the successfully completed PID>.*** else else echo "Process with Process ID ${p} Still running." tmp+=("${p}") done pids+=( ${tmp[*]}) done
Как я могу это получить?
Я не буду слишком много комментировать структуру или содержимое сценария, кроме того, что вы помещаете PID в массив pids
последовательным образом.
Вы ожидаете, что эти же PID будут одинаковыми.
Это означает, что команда, которую вы ждете на шаге n
цикла, будет использовать параметры в строке n
config.txt
.
Единственное, что может вызвать проблемы, это ваши набеги в файловую систему /proc
. Это не нужно. Вам также необходимо проверить условие на внешнем цикле (например, $cnt
не будет равно количеству строк в файле config.txt
на первой итерации).