Несколько моментов:
Если ваша цель с nohup
- не допустить, чтобы удаленный выход оболочки убивал ваши рабочие процессы, вы следует использовать nohup
в самом скрипте, а не в отдельных рабочих процессах, которые он создает.
Как объясняется здесь , nohup
только предотвращает получение процессами SIGHUP и взаимодействие с терминалом, но не нарушает отношения между оболочкой и ее дочерними процессами.
В связи с вышеизложенным, с nohup
или без него, простое ожидание
между двумя циклами for
вызовет второй for
] будет выполняться только после завершения всех дочерних процессов, запущенных первым для
.
С простым ожиданием
:
ожидаются все активные в данный момент дочерние процессы, и статус возврата равен нулю.
Если вам нужно запустить второй для
только в том случае, если в первом не было ошибок, тогда вам нужно сохранить каждый рабочий PID с помощью $!
и передать их все wait
:
pids =
для ...
worker ... &
pids + = "$ ! "
готово
подождите $ pids || {echo "были ошибки"> & 2; выход 1; }