Finalizar o segundo processo (paralelo) se o primeiro terminar

3

Vamos supor que temos dois scripts de shell sendo executados em paralelo

driver.sh:

./proc1.sh&
./proc2.sh&

como posso terminar um processo se o outro sair com código diferente de zero? (terminate driver.sh)

    
por Mahyar 11.04.2017 / 04:55

2 respostas

2

Usando o GNU Parallel, é assim:

parallel --halt now,fail=1 ::: script1.sh script2.sh
    
por 11.04.2017 / 20:15
1

A menos que você tenha alguma lógica dentro do processo para controlar o outro em alguma alteração de status, você precisa rastreá-los / controlá-los usando PIDs:

#!/bin/bash
./proc1.sh &
pid_1=$!  ## PID of proc1.sh

./proc2.sh &
pid_2=$!  ## PID of proc2.sh

while ps -p ${pid_1} &>/dev/null; do :; done ##Checking for existence of proc1.sh
kill ${pid_2}  ## Killing proc2.sh when proc1.sh is not running anymore
    
por 11.04.2017 / 06:10