Управление заданиямиУправление заданиями в UNIX-подобных операционных системах — комплекс средств по манипуляции пакетными заданиями оболочки UNIX, в частности, в интерактивном режиме, где «задание» — представление оболочки для группы процесса. В наиболее простом случае управление заданиями будет состоять из приостановки, возобновления или завершения выполнения задания (то есть всех процессов в группе процесса), но может также включать отправку заданию другого сигнала. В отличие от понятия блока управления заданием (англ. job control block) (применяющегося для последовательных выполнений в пакетном режиме), управление заданиями подразумевает пользовательский инструментальный набор для работы с пакетным режимом из интерактивных средств. ОбзорБольшинство пользовательских задач[1] при работе через терминал (или эмулятор терминала) — просмотр каталогов, редактирование файлов и так далее — обеспечивается передачей управления программам с возвращением контроля оболочке при выходе из программы через стандартный вход и стандартный выход к оболочке, читающей с терминала или пишущей в него и принимая сигналы, посланные с клавиатуры, такие, как Control+C. Однако иногда пользователю может потребоваться выполнить задачу, используя терминал для другой цели — задача, которая запущена, но не принимает ввод с терминала, называемая фоновым заданием, в то время как единственную задачу, которая принимает ввод с терминала, называют заданием переднего плана. Управление заданиями — средство, разработанное, чтобы сделать это возможным, позволяющее пользователю запускать процессы в фоне, отправлять процессы переднего плана в фон, переводить фоновый процесс на передний план, и процессы запуска и остановки (англ. suspend, resume, terminate). Понятие «задание» отображает концепцию единственной команды оболочки на концепцию операционной системы, когда одной командой можно запустить много процессов. Конкретно, единственная задача может состоять из множества процессов: данный процесс может создавать дополнительные дочерние процессы, которые могут в свою очередь создавать их собственные дочерние процессы и так далее, и единственная команда оболочки может состоять из конвейера множества связанных процессов. Ими управляет операционная система как одной единственной группой процесса[англ.] (все процессы группы разделяют один и тот же идентификатор — PGID), и внутреннее представление группы процесса оболочки — задание. Это определено в POSIX как:[2]
Группа процессов может таким образом управляться как единое целое оболочки, единое задание. Задание в свою очередь может быть ссылаться на дескриптор[англ.][3], ID процесса управления заданием используется встроенной командой оболочки для ссылки на задание. ID задания начинаются с символов Управление заданиями и ID задания применяются обычно только в интерактивном использовании, где они упрощают обращение к группам процессов; в скриптах вместо них часто используются PGID, поскольку они точнее и устойчивее, а реально управление процессами отключено по умолчанию в скриптах Bash. ПримерПользователь может манипулировать заданиями внутри данной сессии при помощи встроенных команд оболочки, таких, как
Задание на схеме эквивалентно группе процессов. PPID — идентификатор родительского процесса. SID — идентификатор сессии. TTY — управляющий терминал. ИсторияУправление заданиями впервые было применено в оболочке Csh Джимом Калпом[6] затем в МИПСА в Австрии, используя особенности ядра 4.1 BSD, и принято в оболочке Korn (ksh), разработанной Bell Labs. Позже было включено в версию SVR4 оболочки Bourne (sh), и так существует с тех пор в большинстве современных оболочек Unix. ПрименениеСписок заданий оболочка держит обычно в таблице процессов. Команда jobs перечисляет фоновые задания, существующие в таблице процессов, наряду с номером и состоянием (остановлен или запущен) каждого процесса. Команда disown может использоваться для удаления заданий из таблицы процессов, преобразовывая их из заданий в демоны так, чтобы они продолжились выполнять даже когда пользователь выйдет из системы (logout). Задание, выполняющееся «на переднем плане», может быть остановлено вводом символов (Ctrl+Z). Это пошлёт сигнал Остановленное задание может быть возобновлено как фоновое задание командой bg оболочки, или перемещено на передний план командой fg. В любом случае, оболочка соответственно перенаправляет ввод-вывод и посылает процессу сигнал Фоновый процесс, который пытается прочитать или записать в его управляющий терминал, отправит сигнал Примечания
Литература
Ссылки
|
Portal di Ensiklopedia Dunia