Úselo waitcon 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 -muna %nespecificación de trabajo y usarla , pero es casi seguro que no quiera hacerlo: el control del trabajo tiene muchos otros efectos secundarios .
waitdevolverá el mismo código que el proceso finalizado. Puede usar wait $Xen 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 trapsobreSIGCHLD , contar el número de terminaciones, y manejar todos los waits de una sola vez, cuando todos ellos han terminado. Probablemente pueda salirse con el uso waitsolo casi todo el tiempo.