%20%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%2C%20%D0%B5%D1%81%D0%BB%D0%B8%20%D0%BF%D0%B5%D1%80%D0%B2%D1%8B%D0%B9%20%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%20%D0%B7%D0%B0%D0%B2%D0%B5%D1%80%D1%88%D0%B5%D0%BD.png)
Предположим, у нас есть два скрипта оболочки, работающих параллельно.
драйвер.sh:
./proc1.sh&
./proc2.sh&
как завершить процесс, если другой процесс завершился с ненулевым кодом? (terminate driver.sh)
решение1
С использованием GNU Parallel это выглядит так:
parallel --halt now,fail=1 ::: script1.sh script2.sh
решение2
Если у вас нет логики внутри процесса wither для управления другими процессами при изменении статуса, вам необходимо отслеживать/контролировать их с помощью 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