Comment attendre dans un script bash que plusieurs sous-processus générés à partir de ce script se terminent et retournent le code de sortie! = 0 lorsqu'un des sous-processus se termine par le code! = 0?
Script simple:
#!/bin/bash
for i in `seq 0 9`; do
doCalculations $i &
done
wait
Le script ci-dessus attendra les 10 sous-processus générés, mais il donnera toujours le statut de sortie 0 (voir help wait
). Comment puis-je modifier ce script pour qu'il découvre les états de sortie des sous-processus générés et renvoie le code de sortie 1 lorsque l'un des sous-processus se termine par le code! = 0?
Existe-t-il une meilleure solution pour cela que de collecter les PID des sous-processus, de les attendre dans l'ordre et de additionner les états de sortie?
wait -n
a un petit problème: s'il ne reste aucun travail enfant (alias condition de concurrence ), il renvoie un état de sortie différent de zéro (échec) qui peut être distingué d'un processus enfant échoué.
wait -n
, disponible dans bash moderne pour revenir uniquement lorsque la première / prochaine commande est terminée.