Використовуйте wait
PID, який :
Зачекайте, поки не завершиться дочірній процес, визначений кожним під- кодом ідентифікатора процесу або специфікацією завдання 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
самостійно майже весь час.