Beenden Sie den zweiten (parallelen) Prozess, wenn der erste beendet wurde

Beenden Sie den zweiten (parallelen) Prozess, wenn der erste beendet wurde

Nehmen wir an, wir haben zwei Shell-Skripte parallel laufen

treiber.sh:

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

wie kann ich einen Prozess beenden, wenn der andere mit einem Code ungleich Null beendet wurde? (driver.sh beenden)

Antwort1

Mit GNU Parallel sieht es folgendermaßen aus:

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

Antwort2

Sofern Sie nicht über eine Logik innerhalb eines Prozesses verfügen, um den anderen bei einer Statusänderung zu steuern, müssen Sie sie mithilfe von PIDs verfolgen/steuern:

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

verwandte Informationen