[ Страница назад | Страница вперед | Содержание | Индекс | Домой | Юридическая информация | Поиск ]

Руководство пользователя: Операционная система и устройства


Управление заданиями в оболочке Korn (POSIX)

Оболочка Korn (POSIX) содержит функции управления командными последовательностями, или заданиями. При выполнении специальной команды set -m оболочка Korn связывает задание с каждым конвейером. Она также хранит таблицу текущих заданий, которую можно просмотреть командой jobs, и присваивает заданиям целые числа.

При запуске задания в фоновом режиме с помощью символа & оболочка печатает строку следующего вида:

[1] 1234

Данная строка означает, что запущенному в фоновом режиме заданию присвоен номер 1, и в этом задании есть один процесс (верхнего уровня) с ИД 1234.

Для запуска другой команды во время работы задания нажмите Ctrl-Z. Эта комбинация клавиш отправляет текущему заданию сигнал STOP. Обычно оболочка выдает сообщение об останове задания, затем показывает командную строку. После этого можно изменить состояние приостановленного задания (например, перевести его в фоновый режим командой bg), запустить другую команду или вернуть задание в интерактивный режим командой fg. Комбинация клавиш Ctrl-Z действует немедленно, аналогично прерыванию, отменяя ожидание ввода и весь непрочитанный ввод оболочки.

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

Указать фоновое задание в оболочке Korn можно несколькими путями. На задание можно сослаться по ИД любого его процесса, или одним из следующих способов:

%Номер Указывает на задание с конкретным номером.
%Строка Указывает на задание, командная строка которого начинается со Строки.
%?Строка Указывает на задание, командная строка которого содержит Строку.
%% Указывает на текущее задание.
%+ Эквивалентно %%.
%- Указывает на предыдущее задание.

Изменение состояния процесса обнаруживается оболочкой немедленно. Обычно оболочка информирует пользователя о том, что задание блокировано и не может продолжать работу. Для того чтобы не помешать работе интерактивного задания, соответствующее сообщение показывается оболочкой перед выводом командной строки.

Если режим отслеживания включен, каждое завершение фонового задания приводит к запуску процедуры обработки сигнала CHLD.

При попытке выхода из оболочки, в которой запущены фоновые задания, с помощью команды exit или клавиши Ctrl-D система показывает предупреждающее сообщение Есть остановленные (работающие) задания. Для просмотра списка этих заданий введите команду jobs. При немедленной повторной попытке выхода оболочка завершит все приостановленные и работающие задания без предупреждения.

Обработка сигналов

Если после команды введен символ & , и опция отслеживания заданий (monitor) выключена, сигналы SIGINT и SIGQUIT в запущенных командах игнорируются. В противном случае, значения этих сигналов наследуются от родительского процесса.

Если в то время, когда оболочка ожидает завершения интерактивной команды, был принят сигнал, для которого есть процедура обработки, эта процедура будет вызвана только после завершения команды. Таким образом, процедура обработки сигнала CHILD не будет выполнена до завершения интерактивного задания.


[ Страница назад | Страница вперед | Содержание | Индекс | Домой | Юридическая информация | Поиск ]