Intereting Posts
Процесс sshd не работает Почему apt заполняет дисковое пространство, которое `apt-get clean` освобождает? Преобразовать файл .xlsx (MS Excel) в .csv в командной строке с полями, разделенными точкой с запятой Настройка курьера для пересылки определенных сообщений на внешние адреса Скрипт для запуска приложения с выделенной графической картой (Fedora 25) Как изменить отображение ключей для клавиш HOME и END в XTERM? rsync + переименование скопированных файлов Почему wget не работает через туннель ssh? Что делает прокси-сервер для предотвращения использования ssh-client? запустить скрипт perl с неизвестным местоположением perl Как установить яркость по умолчанию после загрузки? Imagemagick используется для генерации PPM в Linux, PPM не читаются Можно ли добиться безупречного звука в Linux? Лучший способ установить скорость последовательного порта при загрузке? Как сделать двойной backtrack 5 5 и Windows 8? Являются ли тире, пепел и ш скрипт 100% совместимыми?

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

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

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