Úselo wait
con un PID, que :
Espere hasta que el proceso secundario especificado por cada ID de proceso pid o especificación de trabajo se cierre y regrese el estado de salida del último comando esperado.
Deberá guardar el PID de cada proceso a medida que avanza:
echo "x" & X=$!
echo "y" & Y=$!
echo "z" & Z=$!
También puede habilitar el control del trabajo en la secuencia de comandos con set -m
una %n
especificación de trabajo y usarla , pero es casi seguro que no quiera hacerlo: el control del trabajo tiene muchos otros efectos secundarios .
wait
devolverá el mismo código que el proceso finalizado. Puede usar wait $X
en cualquier punto posterior (razonable) para acceder al código final $?
o simplemente usarlo como verdadero / falso:
echo "x" & X=$!
echo "y" & Y=$!
...
wait $X
echo "job X returned $?"
wait
se detendrá hasta que el comando se complete si aún no lo ha hecho.
Si se quiere evitar estancamiento de esa manera, se puede establecer un trap
sobreSIGCHLD
, contar el número de terminaciones, y manejar todos los wait
s de una sola vez, cuando todos ellos han terminado. Probablemente pueda salirse con el uso wait
solo casi todo el tiempo.