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