¿Cómo esperar en un script bash varios subprocesos generados desde ese script para finalizar y devolver el código de salida! = 0 cuando alguno de los subprocesos termina con el código! = 0?
Script simple:
#!/bin/bash
for i in `seq 0 9`; do
doCalculations $i &
done
wait
El script anterior esperará a los 10 subprocesos generados, pero siempre dará el estado de salida 0 (ver help wait
). ¿Cómo puedo modificar este script para que descubra los estados de salida de los subprocesos generados y devuelva el código de salida 1 cuando alguno de los subprocesos termina con el código! = 0?
¿Hay alguna solución mejor para eso que recolectar los PID de los subprocesos, esperarlos en orden y sumar los estados de salida?
wait -n
tiene un pequeño problema: si no quedan trabajos secundarios restantes (también conocido como condición de carrera), devuelve un estado de salida distinto de cero (fallo) que puede ser indistinguible de un proceso secundario fallido.
wait -n
, disponible en bash moderno para regresar solo cuando se complete el primer / siguiente comando.