Команда wait
без дополнительных спецификаций будет ожидать окончания всех активных дочерних процессов. Это означает, что если был и другой процесс, он будет ждать конца последнего, который закончится.
Ожидание может быть вызвано с указанием идентификатора: с идентификатором можно передать либо PID (идентификатор процесса), либо спецификацию задания. Более того, если это была не одна команда, а канал, то wait
будет ждать конца полного конвейера (см. Ниже).
Таким образом, с wait 7165
он будет ждать конца процесса с идентификатором 7165, с wait %2
задания [2]
.
В скрипте вы можете сохранить PID последнего отправленного задания, используя переменную $!
; вам нужно сохранить это значение, потому что оно будет обновляться после каждого выполнения команды.
#!/bin/bash
...
command1 & # Another command in background job [1]
command2 && command2b && command2c & # The command in background job [2]
PID_CMD1=$! # Store the PID of the last job, job [2]
some_other_commands # ...
# With this command you will
wait # block all until command0 and all
# the pipe of command1 are completed or...
wait $PID_CMD1 # With this command you will wait only the end
# of command1 pipeline or...
wait %2 # With this command you'll wait the end of job [2]
# Note that if the command 1 fails or is really fast
# you can have for the command 2 the job ID 1
command3 & # job [1] again! it's possible to recycle the numbers
command4 & # job [2]
От man bash
:
Оболочка связывает работу с каждым конвейером. В нем хранится таблица выполняемых в данный момент заданий, которая может быть указана с помощью команды jobs. Когда bash запускает задание асинхронно (в фоновом режиме), он печатает строку, которая выглядит следующим образом:
[1] 25647
это означает, что это задание № 1 и что идентификатор процесса последнего процесса в конвейере, связанного с этим заданием, равен 25647. Все процессы в одном конвейере являются членами одной и той же работы. Bash использует абстракцию работы как основу для контроля работы ...
Вы можете прочитать больше об ожидании с help wait
.