Intereting Posts
Ошибки при поиске специальных символов в awk Как использовать YubiKeys с ключами SSH в двухэтапной аутентификации? вставить текст буфера обмена плюс строку с .inputrc Как я могу очистить рабочий стол через командную строку? хранить N файлов в подкаталогах Тип файловой системы и параметры монтирования для Archlinux на накопителе SSD NVMe Загрузите список веб-страниц в файл и переименуйте их, чтобы избежать перезаписи? Как найти файл, не зная его имени Добавление строки, содержащей escape-символ с sed «Shutdown -P now» безопасно отключает USB-накопитель, установленный на `/ dev / sdb1`? Проверка клиентом электронной почты с цифровой подписью Какие файлы необходимо удалить перед дублированием виртуальной машины? OCR для Linux-систем Сопоставимый редактор для gedit с меньшими зависимостями? Получение «Ошибка протокола» при попытке создания символической ссылки в Docker

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

Предположим, что мы имеем два сценария оболочки, которые работают параллельно

driver.sh:

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

как я могу завершить процесс, если другой вышел с ненулевым кодом? (завершение driver.sh)

Использование GNU Parallel выглядит так:

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

Если у вас нет логики внутри процесса завязывания, чтобы управлять другим при изменении состояния, вам необходимо отслеживать / контролировать их с помощью 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