Linux

Команда ожидания Bash

Команда ожидания Bash

ждать - это команда, которая ожидает завершения заданных заданий и возвращает статус выхода ожидаемой команды.

Поскольку ждать команда влияет на текущую среду выполнения оболочки, в большинстве оболочек она реализована как встроенная команда.

В этой статье мы рассмотрим встроенный в 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 "Статус выхода: $?" 

Давайте объясним код построчно:

  1. Первая строка называется shebang и сообщает операционной системе, какой интерпретатор использовать для анализа остальной части файла.
  2. Мы используем спать команда для имитации трудоемкого фонового процесса.
  3. $! - внутренняя переменная Bash, в которой хранится PID последнего задания, запущенного в фоновом режиме. В этом примере это PID спать команда. Мы сохраняем PID в переменной (process_id).
  4. Печатает номер PID.
  5. PID передается в ждать команда, которая ждет, пока спать команда завершается.
  6. Печатает статус выхода ждать команда. $? это внутренняя переменная 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

На этот раз ждать команда не будет завершена. Он будет работать до тех пор, пока спать процесс завершается.

Заключение #

В ждать команда ожидает завершения указанных заданий и возвращает код выхода задания.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Лучшие эмуляторы игровой консоли для Linux
В этой статье будет перечислено популярное программное обеспечение для эмуляции игровых консолей, доступное для Linux. Эмуляция - это уровень совмести...
Лучшие дистрибутивы Linux для игр в 2021 году
Операционная система Linux прошла долгий путь от своего первоначального простого серверного вида. Эта ОС значительно улучшилась за последние годы и те...
Как записать и транслировать игровую сессию в Linux
В прошлом игры считались только хобби, но со временем игровая индустрия увидела огромный рост с точки зрения технологий и количества игроков. Игровая ...