- Команда wait в Bash
- Команда wait Bash
- Примеры
- Вывод
- 🐧 Команда wait в Linux с примерами
- Как работает команда wait
- Примеры команд wait
- Пример: 1 – скрипт с командой wait
- Пример 2 – Скрипт без команды wait
- Пример: 3 – Скрипт с командой wait и статусом возврата
- Заключение
- Wait Command in Linux
- Example-1: Using wait command for multiple processes
- Example-2: Test wait command after using kill command
- About the author
- Fahmida Yesmin
- Wait Command in Linux with Examples
- How wait command works
- Wait Command Examples
- Conclusion
Команда wait в Bash
wait — это команда, которая ожидает завершения заданных заданий и возвращает статус выхода ожидаемой команды.
Поскольку команда wait влияет на текущую среду выполнения оболочки, в большинстве оболочек она реализована как встроенная команда.
В этой статье мы рассмотрим встроенную команду wait
Команда wait Bash
Общий синтаксис wait имеет следующий вид:
ID — это идентификатор процесса или задания. Если ID не указан, команда ожидает завершения всех дочерних фоновых заданий.
Команда wait возвращает статус выхода последней ожидаемой команды.
Например, чтобы дождаться фонового процесса с PID 7654 , вы должны использовать:
Когда задано несколько процессов, команда ожидает завершения всех процессов.
Задания указываются с использованием спецификации задания («спецификация задания»), которая является способом ссылки на процессы, составляющие задание. Спецификация задания начинается с символа процента, за которым следует номер задания ( %n ). Вот пример:
Идентификатор задания оболочки (в скобках) и идентификатор процесса будут отображаться на вашем терминале:
Чтобы дождаться задания, запустите команду wait за которой следует спецификация задания:
При вызове с параметром -n команда ожидает завершения только одного задания из заданных pid или заданий и возвращает статус завершения. Если аргументы не указаны, wait -n ожидает завершения любого фонового задания и возвращает статус завершения задания.
В приведенном выше примере wait -n выводит только статус возврата задания, которое завершается первым; он не показывает PID задания. Если вы хотите получить идентификатор задания или спецификацию задания, для которого возвращается статус выхода, используйте параметр -p чтобы присвоить его переменной:
-p был представлен в Bash 5.1. Если вы используете старую версию Bash, вы получите ошибку «неверный вариант».
Параметр -f сообщает wait чтобы дождаться фактического завершения каждого pid или jobpec, прежде чем возвращать свой код выхода, вместо того, чтобы возвращаться при изменении статуса задания. Эта опция действительна, только если включено управление заданиями. По умолчанию управление заданиями включено только для интерактивных запросов.
Примеры
wait обычно используется в сценариях оболочки, которые порождают дочерние процессы, выполняющиеся параллельно.
Чтобы проиллюстрировать, как работает команда, создайте следующий сценарий:
Давайте объясним код построчно:
- Первая строка называется shebang и сообщает операционной системе, какой интерпретатор использовать для анализа остальной части файла.
- Мы используем команду sleep для имитации трудоемкого фонового процесса.
- $! — это внутренняя переменная Bash, в которой хранится PID последнего задания, запущенного в фоновом режиме. В этом примере это PID команды перехода в sleep . Мы сохраняем PID в переменной ( process_id ).
- Печатает номер PID.
- PID передается команде wait которая ожидает завершения команды sleep
- Печатает статус выхода команды wait . $? — это внутренняя переменная Bash, которая содержит статус выхода последней выполненной команды.
Если вы запустите сценарий, он напечатает что-то вроде этого:
Вот пример использования опции -n
Когда скрипт выполняется, он порождает 3 фоновых процесса. wait -n ожидает завершения первого задания и вывода оператора echo. wait ожидает завершения всех дочерних фоновых заданий.
Последний пример объясняет параметр -f . Откройте терминал и запустите:
Откройте другой терминал и остановите процесс командой kill :
После изменения статуса процесса команда wait завершится и вернет код завершения процесса.
Теперь повторите те же шаги, но на этот раз используйте wait -f $pid :
Остановите процесс с другого терминала:
На этот раз команда wait не завершится. Он будет работать до тех пор, пока не sleep процесс.
Вывод
Команда wait ожидает завершения указанных заданий и возвращает код завершения задания.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Источник
🐧 Команда wait в Linux с примерами
Wait – это команда shell, которая ожидает завершения определенного процесса, а затем возвращает его состояние завершения.
Команда wait используется для ожидания определенного идентификатора процесса и идентификатора задания и возврата их статуса завершения.
При выполнении большого потока автоматизации нам нужно сделать так, чтобы несколько модулей ожидали завершения предыдущего набора модулей и возвращали данные, конвейеризованные в следующие модули, в этом случае мы можем использовать команду Wait до завершения предыдущего модуля.
Как работает команда wait
Команда wait, используемая для наблюдения за предыдущим процессом, зависит от состояния возврата предыдущего процесса и возвращает статус выхода.
Например, если мы хотим дождаться завершения определенного идентификатора процесса 13245, то мы должны использовать «ждать 13245», когда процесс 13245 завершает команду ожидания, возвращающую значения 13245 состояния выхода.
– wait PID (PID – идентификатор процесса команды, для которой утилита ожидает завершения).
– wait JID (JID – идентификатор задания, который идентифицирует фоновый процесс, ожидающий wait, применим только для вызовов wait в текущей среде выполнения оболочки).
Значение состояния выхода команды ожидания зависит от последнего указанного PID / JID.
Если какой-либо процесс завершается ненормально, состояние выхода будет больше 128.
Команда ожидания завершается со значением 0, когда она вызывает без дочернего процесса, и все идентификаторы процесса, известные текущей оболочке, завершены.
Если команда wait обнаруживает какую-либо ошибку, она возвращает любое значение от 1 до 126 .
Если последний идентификатор процесса неизвестен, команда ожидания завершается со значением 127.
Примеры команд wait
Давайте проверим несколько скриптов, чтобы понять, как работает команда wait.
Пример: 1 – скрипт с командой wait
У нас есть два скрипта с именами «foo.sh» и «bar.sh».
Скрипт «Foo.sh» выводит числа от 1 до 5, а скрипт «bar.sh» вызывает foo.sh и запускает его в фоновом режиме, получает PID для foo.sh и ожидает его завершения, после его завершения начнинает цикл ‘bar.sh’ и завершается.
Пример 2 – Скрипт без команды wait
У нас есть два скрипта с именами «foo.sh» и «bar.sh».
Скрипт ‘foo.sh’ выводит числа от 1 до 5, а скрипт bar.sh вызывает foo.sh и запускает его в фоновом режиме, но не будет ждать завершения foo.sh и выполнения обоих скриптов.
Пример: 3 – Скрипт с командой wait и статусом возврата
Скрипт ‘bar.sh’ вызовет foo.sh и запустит его в фоновом режиме, получит PID файла foo.sh и дождется его завершения, после его завершения запустится цикл bar.sh и завершится.
Наконец, он возвращает код выхода скрипта foo.sh
Скрипт – foo.sh (статус выхода = 0)
Скрипт – foo.sh (статус выхода = NON ZERO)
Заключение
Wait и Sleep – это системные вызовы в операционной системе, основанные на времени.
Давайте посмотрим разницу между командами wait и sleep.
Wait: когда пользователь хочет остановить текущий процесс, он освобождает все ресурсы, удерживаемые процессом, и ожидает выполнения другого процесса.
Нам нужно использовать notify, чтобы этот процесс знал, что надо начать выполнение снова после завершения другого процесса.
Sleep: этот системный вызов используется тогда, когда пользователь хочет на некоторое время остановить текущий процесс. Он удерживает блокировки ресурсов до истечения времени ожидания и снова запускает выполнение процесса. Здесь процесс имеет контроль на протяжении всего выполнения. Например, я выполнил некоторую команду в bash и хочу некоторое время уходить в sleep, так как ожидаю некоторого вывода от выполненной команды, которая будет использоваться для дальнейшего выполнения текущего процесса.
Источник
Wait Command in Linux
The exit status value of wait command depends on the command indicated by the last operand specified. When any process terminates abnormally then the exit status will be greater than 128 and shall be different from the exit status values of other commands. wait command exits with the value 0 when it calls with no operands and all process IDs are known by the current shell have terminated. If wait command detects any error then it returns any value from 1 to 126. If the last process id is unknown then wait command exits with value 127. How you can use wait command in Linux is shown in this tutorial.
Example-1: Using wait command for multiple processes
After executing the following script, two processes will run in the background and the process id of the first echo command is stored in $process_id variable. When wait command is executed with $process_id then the next command will wait for completing the task of the first echo command. The second wait command is used with ‘$!’ and this indicate the process id of the last running process. ‘$?’ is used to read the status value of wait command.
Output:
Example-2: Test wait command after using kill command
In the following script, wait command is executed after terminating the process. sleep command is running as a background process and kill command is executed to terminate the running process. After that wait command is executed with the process id of the terminated process. The output will show the process id of the terminated process.
Output:
Example-3: Check the exit status value
In the following script, the function check() is called by two argument values. It is discussed in the starting of the tutorial that if wait command executed successfully the exit value will 0 and if wait command detects any error then it will returns any value between 1 and 126. After running the script, if you pass 0 as second argument value then wait command terminates successfully and if you pass any value more than zero then it terminates unsuccessfully.
Output:
Hope, this tutorial will help to learn the use wait command properly. There is another command in Linux, named sleep to wait for the certain amount of times but there are some differences between these commands. If you are interested to know about sleep command then you can visit this link.
About the author
Fahmida Yesmin
I am a trainer of web programming courses. I like to write article or tutorial on various IT topics. I have a YouTube channel where many types of tutorials based on Ubuntu, Windows, Word, Excel, WordPress, Magento, Laravel etc. are published: Tutorials4u Help.
Источник
Wait Command in Linux with Examples
Wait is a shell command that waits for a given process to complete, then returns its exit status. Wait command is used to wait either particular process ID and job ID and return their termination status.
When executing the big automation flow we need to make few modules should wait until the previous set of module complete and return data pipelined into next modules, in this case we can use Wait command until complete previous module.
How wait command works
Wait command used to monitor the previous process, depends on previous process return status it will return the exit status. For example, if we want to wait to complete a particular process ID 13245, then we should use “wait 13245“ when process 13245 complete wait command return the return values of 13245 exit status.
— wait PID (PID — Process ID of a command, for which the utility is to wait for the termination).
— wait JID (JID — Job ID that identifies a background process to wait for, applicable only for invocations of wait in the current shell execution environment).
The exit status value of wait command depends on the last PID/JID specified. When any process terminates abnormally then the exit status will be greater than 128.
Wait command exits with the value 0 when it calls with no child process and all process IDs are known by the current shell have terminated. If wait command detects any error then it returns any value from 1 to 126. If the last process id is unknown then wait command exits with value 127.
Wait Command Examples
Let us check a few scripts to understand how wait command works.
Example: 1 – Script with Wait command
We have two scripts called ‘foo.sh’ and ‘bar.sh’ script. ‘Foo.sh’ script print numbers between 1 to 5 and ‘bar.sh’ script will call the foo.sh and run it in the background, get the PID of foo.sh and wait for it to complete, once completes it will start ‘bar.sh’ loop and complete.
Example 2 – Script without wait command
We have two scripts called ‘foo.sh’ and ‘bar.sh’ script. ‘foo.sh’ script print numbers between 1 to 5 and bar.sh script will call the foo.sh and run it in background but it will not wait for foo.sh to complete and execute both scripts.
Example: 3 – Script with wait command & return status
‘bar.sh’ script will call the foo.sh and run it in background, get the PID of foo.sh and wait for it to complete, once it complete it will start bar.sh loop and complete, Finally, it return the exit code of foo.sh script.
Script – foo.sh (Exit status = 0)
Script – foo.sh (Exit status = NON Zero)
Conclusion
Wait and Sleep both are time-based system calls in the Operating system. Let’s check the difference between wait and sleep command.
Wait: When user wants to halt the current process and it releases all the resources hold by the process and waits for some other process to execute. We need to use notify to make this process aware that start execution again upon completion of other process.
Sleep: This system call is used when user wants to halt the current process for some time. It keeps the locks hold on resources till the sleep time is over and again starts the execution of the process. Here process has control throughout the execution. e.g I executed some command on bash and want to sleep for some time since expecting some output from executed command which will be utilized in further execution of current process.
Источник