6

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

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

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

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

1 ответ1

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .