Como aguardar em um script bash por vários subprocessos gerados nesse script para concluir e retornar o código de saída! = 0 quando qualquer um dos subprocessos termina com o código! = 0?
Script simples:
#!/bin/bash
for i in `seq 0 9`; do
doCalculations $i &
done
wait
O script acima aguardará todos os 10 subprocessos gerados, mas sempre dará o status de saída 0 (consulte help wait
). Como posso modificar esse script para descobrir os status de saída dos subprocessos gerados e retornar o código de saída 1 quando qualquer um dos subprocessos termina com o código! = 0?
Existe alguma solução melhor para isso do que coletar PIDs dos subprocessos, aguardá-los em ordem e somar os status de saída?
wait -n
tem um pequeno problema: se não houver trabalhos filhos restantes (condição de corrida), ele retornará um status de saída diferente de zero (falha) que pode ser indistinguível de um processo filho com falha.
wait -n
, disponível no bash moderno para retornar somente quando o primeiro / próximo comando for concluído.