BASH: асинхронное выполнение команд с задержкой

эффективно то, что я пытаюсь выполнить, заключается в следующем, где cmd1 занимает некоторое время для запуска (~1 минута), а cmd2 возвращается почти мгновенно при каждом запуске:

  1. cmd1 начинается
  2. подождите немного (~10 секунд)
  3. cmd2 выполняется
  4. подождите еще немного
  5. cmd2 снова работает
  6. проходит какое-то время
  7. cmd1 заканчивается

важно этот сценарий, поскольку он должен уйти внутри довольно большого цикла, который запускает cmd1 с множеством различных параметров, а затем делает то же самое снова и снова для нескольких других длинных команд.

Как я могу это сделать?

23
задан Mala
02.01.2023 21:40 Количество просмотров материала 2819
Распечатать страницу

1 ответ

cmd1 &
cmd1_pid=$!
sleep 10
cmd2
sleep 10
cmd2
wait $cmd1_pid

объяснение: cmd1 & запускает процесс в фоновом режиме оболочки. the $! переменная содержит pid этого фонового процесса. оболочка продолжает обрабатывать другие cmds. sleep 10 означает 'подождите немного'. ОП просто хочет уволить cmd2 в линейном порядке, так что часть тривиальна. в конце фрагмента скрипта мы просто ждем cmd1 до конца (возможно, даже раньше) с wait $cmd1_pid.

7
отвечен akira 2023-01-04 05:28

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх