<Предыдущая | Содержание: | Следующая>
ждать
Мы продемонстрируем ждать сначала команда. Для этого нам понадобятся два скрипта, родительский скрипт:
#! / Bin / Баш
# async-parent: Демонстрация асинхронного выполнения (родитель) echo "Родитель: запуск ..."
echo "Родитель: запуск дочернего скрипта ..." async-child &
pid = $!
echo "Родитель: дочерний элемент (PID = $ pid) запущен."
echo "Родитель: продолжается ..." сон 2
echo "Родитель: пауза, чтобы дождаться завершения дочернего процесса ..." wait $ pid
echo "Родитель: дочерний элемент завершен. Продолжение ..." echo "Родитель: родительский элемент завершен. Выход."
#! / Bin / Баш
# async-parent: Демонстрация асинхронного выполнения (родитель) echo "Родитель: запуск ..."
echo "Родитель: запуск дочернего скрипта ..." async-child &
pid = $!
echo "Родитель: дочерний элемент (PID = $ pid) запущен."
echo "Родитель: продолжается ..." сон 2
echo "Родитель: пауза, чтобы дождаться завершения дочернего процесса ..." wait $ pid
echo "Родитель: дочерний элемент завершен. Продолжение ..." echo "Родитель: родительский элемент завершен. Выход."
и дочерний сценарий:
#! / Bin / Баш
# async-child: Демонстрация асинхронного выполнения (дочерний элемент) echo «Дочерний элемент: дочерний элемент выполняется ...»
спать 5
echo "Ребенок: ребенок готов. Выход."
#! / Bin / Баш
# async-child: Демонстрация асинхронного выполнения (дочерний элемент) echo «Дочерний элемент: дочерний элемент выполняется ...»
спать 5
echo "Ребенок: ребенок готов. Выход."
В этом примере мы видим, что дочерний сценарий очень прост. Настоящее действие выполняет родитель. В родительском скрипте дочерний скрипт запускается и помещается в фоновый режим. Идентификатор процесса дочернего скрипта записывается путем присвоения ПИД-регулятор переменная со значением $! параметр оболочки, который всегда будет содержать идентификатор процесса последнего задания, переведенного в фоновый режим.
Родительский сценарий продолжается, а затем выполняет ждать команда с PID дочернего процесса. Это приводит к тому, что родительский сценарий приостанавливается до завершения дочернего сценария, после чего родительский сценарий завершается.
При выполнении родительский и дочерний скрипты производят следующий вывод:
[я @ linuxbox ~] $ асинхронный родитель
Родитель: начало ...
[я @ linuxbox ~] $ асинхронный родитель
Родитель: начало ...
Асинхронное выполнение
Родитель: запуск дочернего скрипта ... Родитель: дочерний (PID = 6741) запущен. Родитель: продолжается ...
Ребенок: ребенок бежит ...
Родитель: пауза, чтобы ждать, пока ребенок закончит ... Ребенок: ребенок готов. Выход.
Родитель: ребенок закончил. Продолжаем ... Родитель: родитель готов. Выход.
Родитель: запуск дочернего скрипта ... Родитель: дочерний (PID = 6741) запущен. Родитель: продолжается ...
Ребенок: ребенок бежит ...
Родитель: пауза, чтобы ждать, пока ребенок закончит ... Ребенок: ребенок готов. Выход.
Родитель: ребенок закончил. Продолжаем ... Родитель: родитель готов. Выход.