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
calculations $i &
done
wait
The above script will wait for all 10 spawned subprocesses, but it will always give the 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 the subprocesses ends with code !=0
?
Is there any better solution for that than collecting PIDs of the subprocesses, waiting for them in order, and summing exit statuses?
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
pids=()
for i in $n_procs; do
./procs[${i}] &
pids[${i}]=$!
done
# wait for all pids
for pid in ${pids[*]}; do
wait $pid
done