ИДПА из дочернего процесса в фоновом режиме сохраняются в $!. Вы можете сохранить все дочерние процессы дочерних процессов в массив, например. PIDS [].
wait [-n] [jobspec or pid …]
Подождите, пока дочерний процесс, указанный каждым процессом ID PID или работа спецификации jobspec завершает работу и возвращает статус выхода последней команды ждали.Если задана спецификация задания, все процессы в задании ждут. Если аргументы не заданы, ожидаются все текущие дочерние процессы, а статус возврата равен нулю. Если включена опция -n, ожидание ожидает завершения любого задания и возврата его статуса выхода. Если ни jobspec, ни PID определяет активный дочерний процесс оболочки, возвращается статус 127.
Использование ждать команды, которую вы можете ждать все дочерние процессы отделки, между тем вы можете получить статус выхода каждого ребенок процессов и магазин статус в СТАТУС []. Затем вы можете сделать что-то в зависимости от статуса.
Я пробовал следующий код, и он работает хорошо.
#!/bin/bash
# start 3 child processes concurrently, and store each pid into PIDS[].
i=0
process=(a.sh b.sh c.sh)
for app in ${process[@]}; do
./${app} &
pid=$!
PIDS[$i]=${pid}
((i+=1))
done
# wait for all processes to finish, and store each process's exit code into STATUS[].
i=0
for pid in ${PIDS[@]}; do
echo "pid=${pid}"
wait ${pid}
STATUS[$i]=$?
((i+=1))
done
# after all processed finish, check their exit codes in STATUS[].
i=0
for st in ${STATUS[@]}; do
if [[ ${st} -ne 0 ]]; then
echo "failed"
else
echo "finish"
fi
((i+=1))
done
... а победитель? – TrueY