Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
mtd_SPO_2013i.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
370.18 Кб
Скачать

11. Управление заданиями.

Группа из 3 builtin (bg,fg,jobs) входит в управление заданиями bash. Для управления заданиями используется также builtin посылки сигналов процессам kill и посылка сигналов интерактивному процессу с клавиатуры его управляющего терминала ^z – приостановить интерактивный процесс (suspend) и вернуть управление оболочке, ^c - прервать интерактивный процесс и ^d – конец данных, вводимых для интерактивного процесса с терминала. Имеется еще и сигнал завершения интерактивного процесса с выдачей дампа памяти ^\ , однако не стоит им пользоваться без надобности, всякий раз в текущий директорий будет разгружаться дамп памяти – файл, имя которого образовано базовым именем запущенной программы с суффиксом .core объемом до мегабайта, что перегрузит ваш HOME. Приостановка выполняющегося интерактивного процесса символом suspend (^z) выполняется немедленно и имеет побочным эффектом разгрузку буферов задержанного вывода (pending output) и предварительного ввода (typeahead) процесса.

Задание (job) образует каждый процесс, выполняющийся в фоновом режиме (background) и каждый приостановленный процесс (suspend). Задание также образует каждый конвейер (pipeline) – цепочка одновременно выполняющихся процессов с передачей данный от STDOUT левого процесса на STDIN правого процесса. В задании, порожденном конвейером, содержится таблица всех процессов, образующих цепочку, и все эти процессы являются членами одного и того же задания.

Чтобы запустить программу в фоновом режиме в конце командной строки запуска нужно поставить символ амперсант - & в виде отдельного токена (отделив пробелом от предшествующего слова). Когда bash стартует фоновый процесс, на терминал сообщение:

[4] 73895

В квадратных скобках – номер задания, за ним PID процесса, стартовавшего в фоновом режиме. Управление заданиями организуется оболочкой и каждая сессия имеет свое независимое от других множество заданий. Если из своего сеанса работы вы сделаете вызов оболочки даже того же самого типа, например из bash, который является login-shell, сделаете вызов вложенного bash, то у вложенного bash будет свой независимый список заданий и пока вы их все не завершите, вы не сможете вернуться в login-shell (exit не будет выполняться).

Существует несколько способов обратиться к заданию. Символ % является префиксом спецификации задания (jobspec), т.е. ставится перед спецификацией без пробела. Сама спецификация может иметь форму числовую – это номер задания или строковую – это начальный фрагмент командной строки вызова программы, в результате которой был создан процесс, образовавший задание. Можно также задавать произвольную подстроку командной строки, однозначно соответствующую заданию, для этого нужно использовать 2-символьный префикс %? . Если по контексту команды в качестве токена допускается только jobspec, то 1-символьный префикс % можно опускать. Пример:

./slp180.pl & # Запускаем программу в фоновом режиме в результате

# образуется задание, например [3] 73624

./slp.pl & # Запускаем программу в фоновом режиме в результате

# образуется задание, например [4] 73895

Любая из следующих команд переведет 2-е задание в интерактивный режим:

fg %4

fg 4

fg %./slp.

fg ./slp.

fg %?lp.

Но следующие команды не сработают и выдадут в STDERR сообщение:

“-bash: fg: lp: ambiguous job spec” (неоднозначная спецификация задания):

fg %./sl

fg %?lp

Следующая команда также не сработает, выдав в STDERR сообщение:

“-bash: fg: lp: no such job” (нет такого задания), т.к. нет “./” в начале :

fg %slp.pl

Список заданий данного экземпляра оболочки на данный момент просматривается командой jobs.

jobs [-lnprs] [ jobspec ... ]

jobs -x command [args ...]

-l - добавить PID процесса к обычным N job и командной строке запуска процесса, образовавшего задание;

-p – выводить только PID процессов, образующих задания

-n выводить список только тех заданий, которые изменили статус после последнего оповещения об их статусе на терминал.

-r - ограничить вывод только выполняющимися в данный момент заданиями

-s - ограничить вывод только приостановленными заданиями

34

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]