ждать
- это команда, которая ожидает завершения заданных заданий и возвращает статус выхода ожидаемой команды.
Поскольку ждать
команда влияет на текущую среду выполнения оболочки, в большинстве оболочек она реализована как встроенная команда.
В этой статье мы рассмотрим встроенный в Bash ждать
команда.
Баш ждать
Команда #
Общий синтаксис ждать
встроенный имеет следующий вид:
ждать [параметры] ID
Я БЫ
это идентификатор процесса или задания. Если нет Я БЫ
указан, команда ожидает, пока все дочерние фоновые задания не будут завершены.
В ждать
команда возвращает статус выхода последней ожидаемой команды.
Например, чтобы дождаться фонового процесса с PID 7654
, вы бы использовали:
подождите 7654
Когда задано несколько процессов, команда ожидает завершения всех процессов.
Задания указываются с использованием спецификации задания («спецификация задания»), которая является способом ссылки на процессы, составляющие задание. Спецификация задания начинается с символа процента, за которым следует номер задания (% n
). Вот пример:
Выполните команду в фоновом режиме:
rsync -a / home / tmp / home &
Идентификатор задания оболочки (в скобках) и идентификатор процесса будут отображаться на вашем терминале:
[2] 54377
Чтобы дождаться задания, запустите ждать
команда, за которой следует спецификация задания:
подожди% 2
При вызове с -п
опция, команда ожидает завершения только одного задания из заданных идентификаторов или спецификаций заданий и возвращает его статус завершения. Если аргументы не указаны, подожди -n
ожидает завершения любого фонового задания и возвращает статус завершения задания.
ждать -n 45432 54346 76573
В приведенном выше примере, подожди -n
печатает только статус возврата работы, которая завершается первой; он не показывает PID задания. Если вы хотите получить идентификатор задания или спецификацию задания, для которого возвращается статус выхода, используйте -п
возможность присвоить его переменной:
ждать -p идентификатор_задания -n 45432 54346 76573
-п
опция была представлена в Bash 5.1. Если вы используете старую версию Bash, вы получите ошибку «неверный вариант».
В -ж
опция говорит ждать
дождаться фактического завершения каждого pid или jobpec, прежде чем возвращать его код выхода, а не возвращаться при изменении статуса задания. Эта опция действительна только при включенном управлении заданиями. По умолчанию управление заданиями включено только для интерактивных подсказок.
Примеры #
ждать
обычно используется в сценариях оболочки, которые порождают дочерние процессы, которые выполняются параллельно.
Чтобы проиллюстрировать, как работает команда, создайте следующий сценарий:
#!/ bin / bash сон 30 & process_id = $! echo "PID: $ process_id" wait $ process_id echo "Статус выхода: $?"
Давайте объясним код построчно:
- Первая строка называется shebang и сообщает операционной системе, какой интерпретатор использовать для анализа остальной части файла.
- Мы используем
спать
команда для имитации трудоемкого фонового процесса. $!
- внутренняя переменная Bash, в которой хранится PID последнего задания, запущенного в фоновом режиме. В этом примере это PIDспать
команда. Мы сохраняем PID в переменной (process_id
).- Печатает номер PID.
- PID передается в
ждать
команда, которая ждет, покаспать
команда завершается. - Печатает статус выхода
ждать
команда.$?
это внутренняя переменная Bash, которая содержит статус выхода последней выполненной команды.
Если вы запустите сценарий, он напечатает что-то вроде этого:
PID: 36353 Статус выхода: 0
Вот пример с использованием -п
вариант:
#!/ bin / bash sleep 3 & sleep 30 & sleep 5 & wait -n echo "Первое задание выполнено."wait echo" Все работы завершены."
Когда скрипт выполняется, он запускает 3 фоновых процесса. подожди -n
ждет, пока не будет завершено первое задание и напечатан оператор echo. ждать
ожидает завершения всех дочерних фоновых заданий.
первая работа завершена все работы выполнены
Последний пример объясняет -ж
вариант. Откройте терминал и запустите:
спать 3600 &
[1] 46671
Дождитесь процесса:
подождите 46671
Откройте другой терминал и остановите процесс нажатием убийство
команда:
kill -STOP 46671
После изменения статуса процесса ждать
команда завершится и вернет код выхода процесса.
Теперь повторите те же шаги, но на этот раз используйте подождите -f $ pid
:
спать 3600 &
подождите -f 46671
Остановите процесс с другого терминала:
kill -STOP 46671
На этот раз ждать
команда не будет завершена. Он будет работать до тех пор, пока спать
процесс завершается.
Заключение #
В ждать
команда ожидает завершения указанных заданий и возвращает код выхода задания.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.