No meu script, divido um conjunto de dados em input_aa, input_ab, etc. Em seguida, executo cada um deles através do mesmo script Python, como tal:
# Execute program on each split file
for part in input_*; do
python3 $part &
done
wait
Minha pergunta é dupla: como detectar que um processo Python falhou e, quando detectado, como matar todos os filhos gerados e sair do script com falha?
bash
,dash
,yash
,mksh
,zsh
. Basicamente, qualquer shell POSIX, exceto AT&T ksh.set -m
é (sub-) especificado no POSIX, mas como um recurso opcional.kill 0
mata todos os membros do grupo de processos, seja qual for o pai. Vejaps -j
para ver os IDs do grupo de processos.Isto é um exemplo. JOGUE com este primeiro para obter exatamente o que você precisa. Não pode quebrar tanto quanto é.
Está configurado para falhar deliberadamente porque
ls oinkle
falhará (na minha máquina).Quando você obtém o que precisa depois de mexer no script inicial --- Alteração:
para:
mudança:
para:
Os redirecionamentos estão lá para salvar logs. Você pode não querer.
fonte
killfile
poderá não conter todos os pids dos trabalhos que foram iniciados.[ $? -ne 0 ]
...