Используйте wait
с PID, который будет:
Подождите , пока дочерний процесс , указанный каждый идентификатор процесса PID или спецификации задания jobspec выходов и вернуть статус выхода последней команды ждали.
Вам нужно будет сохранять PID каждого процесса по ходу:
echo "x" & X=$!
echo "y" & Y=$!
echo "z" & Z=$!
Вы также можете включить управление заданиями в сценарии set -m
и использовать %n
спецификацию заданий, но вы почти наверняка этого не захотите - контроль заданий имеет много других побочных эффектов .
wait
вернет тот же код, что и процесс, завершенный. Вы можете использовать wait $X
в любой (разумный) момент для доступа к окончательному коду $?
или просто использовать его как true / false:
echo "x" & X=$!
echo "y" & Y=$!
...
wait $X
echo "job X returned $?"
wait
будет приостанавливаться до тех пор, пока команда не завершится, если это еще не сделано
Если вы хотите , чтобы избежать срыва , как это, вы можете установить trap
наSIGCHLD
, подсчитывают количество окончаний, и обрабатывать все wait
с на один раз , когда они уже все закончили. Вы можете, вероятно, сойти с рук в wait
одиночку почти все время.