How to wait in bash for several subprocesses to finish, and return exit code !=0 when any subprocess ends with code !=0?
bash, process, wait
Solution
`wait` also (optionally) takes the `PID` of the process to wait for, and with `$!` you get the `PID` of the last command launched in the background. Modify the loop to store the `PID` of each spawned sub-process into an array, and then loop again waiting on each `PID`.
# run processes and store pids in array
for i in $n_procs; do
./procs[${i}] &
pids[${i}]=$!
done
# wait for all pids
for pid in ${pids[*]}; do
wait $pid
done
Problem
How to wait in a bash script for several subprocesses spawned from that script to finish, and then return exit code `!=0` when any of the subprocesses ends with code `!=0`? Simple script: ``` #!/bin/bash for i in `seq 0 9`; do doCalculations $i & done wait ``` The above script will wait for all 10 spawned subprocesses, but it will always give exit status `0` (see `help wait`). How can I modify this script so it will discover exit statuses of spawned subprocesses and return exit code `1` when any of subprocesses ends with code `!=0`? Is there any better solution for that than collecting PIDs of the subprocesses, wait for them in order and sum exit statuses?