Terminar el segundo proceso (paralelo) si se termina el primero

Terminar el segundo proceso (paralelo) si se termina el primero

Supongamos que tenemos dos scripts de shell ejecutándose en paralelo

conductor.sh:

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

¿Cómo puedo finalizar un proceso si el otro salió con un código distinto de cero? (terminar driver.sh)

Respuesta1

Usando GNU Parallel se ve así:

parallel --halt now,fail=1 ::: script1.sh script2.sh

Respuesta2

A menos que tenga alguna lógica dentro del proceso de marchitamiento para controlar al otro ante algún cambio de estado, necesita rastrearlos/controlarlos usando PID:

#!/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

información relacionada