Управление заданиями (job control) (1114937)
Текст из файла
Содержание1 Управление заданиями (job control)1.1 Основные концепции . . . . . . . . . . . . . . . . . . . . . .1.2 Дополнительность управления заданиями . . . . . . . . . . .1.3 Управляющий терминал . . . . . . . . . . . . . . . . . . . . .1.4 Доступ к управляющему терминалу . . . . . . . . . . . . . .1.5 Сиротские группы процессов . . . . . .
. . . . . . . . . . . .1.6 Функции управления заданиями . . . . . . . . . . . . . . . .1.6.1 Идентификация управляющего терминала . . . . . .1.6.2 Работа с группами процессов . . . . . . . . . . . . .1.6.3 Управление доступом к терминалу . . . . . . . . . . .1.7 Работа интепретатора команд .
. . . . . . . . . . . . . . . .1.7.1 Инициализация интерпретатора команд . . . . . . . .1.7.2 Запуск заданий . . . . . . . . . . . . . . . . . . . . .1.7.3 Переключение между основным и фоновым режимом1.7.4 Остановленные и завершившиеся задания . . . . . .1.7.5 Продолжение остановленных заданий . .
. . . . . . .1......................................................................................................................................................1122233345666788Управление заданиями (job control)«Управление заданиями» обозначает специальный протокол, с помощью которого пользователь может переключаться между несколькими группами процессов (заданиями) в пределах одной сессии.1.1 Основные концепцииОсновное назначение интерактивного интерпретатора команд состоит в чтении команд стерминала пользователя и создании процессов для запуска программ, заданных этими командами.
Для этого используются вызов fork в сочетании с вызовом функции семействаexec.Одна команда может запускать единственный процесс, но часто одна команда используетнесколько процессов. Например, если используется оператор | командного интерпретатора,явно задаётся запуск нескольких программ в отдельных процессах. Даже если запускаетсяодна программа, она может для своей работы использовать несколько процессов.
Например, типичная команда компиляции gcc -c foo.c использует 4 процесса (хотя в любоймомент времени работают только два из них). Назначание утилиты make — запускать другие программы в отдельных процессах.Процессы, относящиеся к одной команде, называются группой процессов (processgroup) или заданием (job). Пользователь может оперировать с ними одной командой.
Например, комбинация Ctrl-C посылает сигнал SIGINT, чтобы завершить все процессы восновной (foreground) группе процессов данного терминала.Сессия (session) — это бо́льшая группа процессов. Как правило, все процессы, запущенные в течение одного сеанса работы пользователя с системой на одном терминале, принадлежат одной сессии.Каждый процесс относится к некоторой группе процессов. Когда создаётся новый процесс, он становится членом той же группы процессов и сессии, что его родительский процесс.1Процесс можно поместить в другую группу процессов, используя функцию setpgid, еслипроцесс принадлежит к той же сессии, что и группа процессов, в которую он помещается.Единственный способ перевести процесс в другую сессию заключается в том, чтобы сделать его начальным процессом новой сессии или лидером сессии (session leader), используяфункцию setsid.
Для лидера сессии создаётся новая группа процессов, из которой он ужене может быть перемещён в другую группу.Обычно новые сессии создаются при входе пользователя в систему, и лидером сессииявляется процесс интерпретатора команд, запущенный в результате успешного входа.Интерпретатор команд, поддерживающий управление заданиями, должен регулировать,какое из заданий может использовать терминал в любой данный момент времени. В противном случае может работать несколько заданий, пытающихся одновременно считать данныес терминала, и возникнет путаница, какое из них должно получить ввод пользователя. Чтобыпредотвратить это, интерпретатор команд должен взаимодействовать с драйвером терминала, используя специальные функции, описанные в этом документе.Интерпретатор команд может предоставлять неограниченный доступ к управляющемутерминалу только одной группе процессов одновременно.
Эта группа процессов называется основным заданием (foreground job) данного управляющего терминала. Другие группыпроцессов, запущенные интерпретатором команд, которые работают без такого доступа ктерминалу, называются фоновыми заданиями (background job).Если фоновое задание пытается считать данные с управляющего терминала, оно останавливается драйвером терминала. Кроме того, если установлен режим TOSTOP терминала,то же самое произойдет при записи данных на терминал фоновым заданием. Пользовательможет остановить основное задание, нажав комбинацию Ctrl-Z (символ SUSP), а программаможет остановить любое задание, послав ему сигнал SIGSTOP. Интерпретатор команд должен отслеживать факт остановки задания, оповещать пользователя об этом и предоставлятьвозможности для пользователя продолжить остановленное задание и переключать заданиямежду основным и фоновым режимом.1.2 Дополнительность управления заданиямиНе все операционные системы поддерживают управление заданиями, хотя большинствосовременных (Linux, FreeBSD, Solaris) поддерживают.Чтобы проверить, поддерживает ли система управление заданиями, можно использоватьмакрос _POSIX_JOB_CONTROL.
Если этот макрос определён в файле <unistd.h>, система поддерживает управление заданиями.Если управление заданиями не поддерживается, в сессии может быть только одна группапроцессов, которая ведёт себя, как будто всегда выполняется как основная группа. Функциисоздания новых групп процессов завершатся неудачно с кодом ошибки ENOSYS. Макросы,определяющие названия различных сигналов, связанных с управлением заданиями, определены, даже если система не поддерживает управление заданиями. Однако система никогдане генерирует такие сигналы, а попытка послать такой сигнал, проверить или установить реакцию на него завершается с ошибкой или ничего не делает.1.3 Управляющий терминалОдним из атрибутов процесса является его управляющий терминал. Сыновние процессы, созданные с помощью fork, наследуют управляющий терминал процесса-отца.
Таким способом все процессы в сессии наследуют управляющий терминал от лидера сессии.2Лидер сессии, который управляет терминалом, называется управляющим процессом терминала.Пользователь обычно не должен заботится о конкретном механизме, использующемсядля того, чтобы выделить управляющий терминал сессии, поскольку это делается системой,когда пользователь входит в систему.Некоторый процесс может отсоединиться от своего управляющего терминала, вызвавsetsid, чтобы стать лидером новой сессии.1.4 Доступ к управляющему терминалуПроцессы основного задания управляющего терминала имеют неограниченный доступ ктерминалу, в отличие от фоновых процессов.Когда процесс фонового задания пытается прочитать данные с его управляющего терминала, группе процессов посылается сигнал SIGTTIN.
Обычно этот сигнал вызывает остановку всех процессов в этой группе (если только они обрабатывают сигнал и не останавливаются). Если процесс, который попытался прочитать данные, игнорирует или блокируетэтот сигнал, read завершается с ошибкой EIO.Аналогично, когда процесс фонового задания пытается записать на свой управляющийтерминал, его группе процессов может быть послан сигнал SIGTTOU. Режим посылки этогосигнала устанавливается битом TOSTOP флагов локального режима терминала. Этот флагпо умолчанию не установлен, поэтому запись на управляющий терминал разрешена. Крометого, запись на управляющий терминал разрешена, если сигнал SIGTTOU игнорируется илиблокируется записывающим процессом.Большинство операций с терминалом, которые может выполнить процесс, рассматриваются как чтение или запись.
В описании каждой операции это указано.1.5 Сиротские группы процессовКогда управляющий процесс завершает работу, его терминал становится свободным иможет использоваться для создания на нём новой сессии. Например, с того же терминаламожет зайти другой пользователь. Поэтому могут возникнуть неприятности, если какие-топроцессы из старой сессии будут пытаться использовать этот терминал.Чтобы предотвратить эту проблему, группы процессов, которые продолжают работатьпосле того, как лидер сессии завершился, помечаются как сиротские группы процессов(orphaned process groups).Когда группа процессов становится сиротой, всем процессам в группе посылается сигналSIGHUP. Обычно это вызывает завершение работы программы.
Однако если процесс игнорирует сигнал или устанавливает для него обработчик сигнала, процесс продолжает работукак процесс-сирота даже после того, как его управляющий процесс завершился, но он болеене имеет доступа к терминалу.1.6 Функции управления заданиями1.6.1 Идентификация управляющего терминалаФункция isatty позволяет провериить, является ли данный файловый дескриптор дескриптором терминала.3#include <unistd.h>int isatty(int fd);Функция возвращает 1, если файловый дескриптор fd является дескриптором терминала, и0 в противном случае. В случае ошибки (неверный файловый дескриптор) возвращается -1.Функция ttyname возвращает имя специального файла устройства терминала.#include <unistd.h>char *ttyname(int fd);Если файловый дескриптор fd связан с терминальным устройством, функция ttynameвозвращает указатель на статическую строку символов, оканчивающуюся символомтерминатором ’\0’.
Эта строка содержит имя специального файла устройства данноготерминала. Функция возвращает NULL, если файловый дескриптор не связан с терминальным устройством, или имя файла устройства не может быть определено.Функция ctermid позволяет определить имя файла устройства управляющего терминала процесса.#include <stdio.h>char *ctermid(char *str);Функция ctermid возвращает строку, содержащую имя файла устройства, соответствующего управляющему терминалу текущего процесса. Если str не равно NULL, это долженбыть массив, который может хранить по крайней мере L_ctermid символов. Имя терминала будет записано в эту строку, и функция возвратит указатель на её начало.
Характеристики
Тип файла PDF
PDF-формат наиболее широко используется для просмотра любого типа файлов на любом устройстве. В него можно сохранить документ, таблицы, презентацию, текст, чертежи, вычисления, графики и всё остальное, что можно показать на экране любого устройства. Именно его лучше всего использовать для печати.
Например, если Вам нужно распечатать чертёж из автокада, Вы сохраните чертёж на флешку, но будет ли автокад в пункте печати? А если будет, то нужная версия с нужными библиотеками? Именно для этого и нужен формат PDF - в нём точно будет показано верно вне зависимости от того, в какой программе создали PDF-файл и есть ли нужная программа для его просмотра.