Завершить второй (параллельный) процесс, если первый процесс завершен

Завершить второй (параллельный) процесс, если первый процесс завершен

Предположим, у нас есть два скрипта оболочки, работающих параллельно.

драйвер.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

Связанный контент