Я пишу сценарий, но мне нужно кое-что, что я не могу найти способ сделать это ...
Мне нужно сделать команду в фоновом режиме «command1 &», а затем где-нибудь в скрипте мне нужно дождаться ее завершения, прежде чем я выполню command2. В принципе, мне нужно это:
ПРИМЕЧАНИЕ: каждая команда выполняется в определенном каталоге! в конце цикла while моя команда 1 создала 4 каталога, где в каждом из них выполнялся определенный процесс, поэтому общее количество запущенных процессов равно 4
a=1
while [$a -lt 4 ]
. command1
#Generates 1 Process
a= `export $a +1`
done
#Wait until the 4 process end and then run the command2
. command2
Я видел кое-что о wait
команде с номером процесса pid, но это тоже не сработало.
shell
scripting
background-process
Жоао Макао
источник
источник
command1
? Можете ли вы изменить его так, чтобы он возвращал PID 4 процессов?$!
переменную, чтобы получить это, передав ееwait
команде, как я там показал.$!
содержит последний фоновый PID, а PID$$
последнего запуска процесса.Ответы:
Вы можете использовать команду
wait PID
для ожидания завершения процесса.Вы также можете получить PID последней команды с помощью
$!
В вашем случае что-то вроде этого будет работать:
После вашего редактирования, поскольку у вас есть несколько идентификаторов PID и вы их знаете, вы можете сделать это:
источник
Самый простой способ сделать это -
comamnd1
вернуть PID запущенных процессов и использовать ихwait
для каждого из них, как указано в ответе @ LaurentC .Другой подход будет примерно таким:
источник
Если вы используете следующий метод, вам может не потребоваться специальное «ожидание всех процессов» после цикла while. Цикл будет ждать завершения тока,
command1
прежде чем он вернется к началу. Пожалуйста, будьте осторожны, как с любым советом. Обратите внимание, единственное, что я сделал, это добавил& wait $!
в конец твоегоcommand1
.источник