Используйте 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одиночку почти все время.