Interested Article - Управление заданиями

Управление заданиями в UNIX-подобных операционных системах — комплекс средств по манипуляции пакетными заданиями оболочки UNIX , в частности, в интерактивном режиме, где «задание» — представление оболочки для группы процесса .

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

Обзор

Большинство пользовательских задач при работе через терминал (или эмулятор терминала ) — просмотр каталогов, редактирование файлов и так далее — обеспечивается передачей управления программам с возвращением контроля оболочке при выходе из программы через стандартный вход и стандартный выход к оболочке, читающей с терминала или пишущей в него и принимая сигналы, посланные с клавиатуры, такие, как Control + C .

Однако иногда пользователю может потребоваться выполнить задачу, используя терминал для другой цели — задача, которая запущена, но не принимает ввод с терминала, называемая фоновым заданием, в то время как единственную задачу, которая принимает ввод с терминала, называют заданием переднего плана. Управление заданиями — средство, разработанное, чтобы сделать это возможным, позволяющее пользователю запускать процессы в фоне, отправлять процессы переднего плана в фон, переводить фоновый процесс на передний план, и процессы запуска и остановки ( англ. suspend, resume, terminate ).

Понятие «задание» отображает концепцию единственной команды оболочки на концепцию операционной системы, когда одной командой можно запустить много процессов. Конкретно, единственная задача может состоять из множества процессов: данный процесс может создавать дополнительные дочерние процессы, которые могут в свою очередь создавать их собственные дочерние процессы и так далее, и единственная команда оболочки может состоять из конвейера множества связанных процессов. Ими управляет операционная система как одной единственной (все процессы группы разделяют один и тот же идентификатор — PGID), и внутреннее представление группы процесса оболочки — задание. Это определено в POSIX как:

Набор процессов, включая конвейер оболочки и любые зависимые от него процессы, которые все входят в одну и ту же группу процесса.

Группа процессов может таким образом управляться как единое целое оболочки, единое задание. Задание в свою очередь может быть ссылаться на , ID процесса управления заданием используется встроенной командой оболочки для ссылки на задание. ID задания начинаются с символов %% ; %n определяет задание с именем n , тогда как %% определяет текущее. Другие ID заданий определены в POSIX . Документация Bash ссылается на (%-prefixed) как jobspec .

Управление заданиями и ID задания применяются обычно только в интерактивном использовании, где они упрощают обращение к группам процессов; в скриптах вместо них часто используются PGID, поскольку они точнее и устойчивее, а реально управление процессами отключено по умолчанию в скриптах Bash.

Пример

Пользователь может манипулировать заданиями внутри данной сессии при помощи встроенных команд оболочки, таких, как jobs , fg или bg .

Задание на схеме эквивалентно группе процессов. PPID — идентификатор родительского процесса. SID — идентификатор сессии. TTY — управляющий терминал.

История

Управление заданиями впервые было применено в оболочке Csh Джимом Калпом затем в МИПСА в Австрии, используя особенности ядра 4.1 BSD , и принято в оболочке Korn (ksh) , разработанной Bell Labs. Позже было включено в версию SVR4 оболочки Bourne (sh) , и так существует с тех пор в большинстве современных оболочек Unix.

Применение

Список заданий оболочка держит обычно в таблице процессов. Команда jobs перечисляет фоновые задания, существующие в таблице процессов, наряду с номером и состоянием (остановлен или запущен) каждого процесса. Команда disown может использоваться для удаления заданий из таблицы процессов, преобразовывая их из заданий в демоны так, чтобы они продолжились выполнять даже когда пользователь выйдет из системы ( logout ).

Задание, выполняющееся «на переднем плане», может быть остановлено вводом символов ( Ctrl + Z ). Это пошлёт сигнал SIGTSTP группе процесса. По умолчанию SIGTSTP скомандует соответствующим процессам остановиться и передать управление ими оболочке. Однако процесс может притом либо зарегистрировать маркер сигнала или же проигнорировать SIGTSTP . Процесс может также быть поставлен на паузу сигналом SIGSTOP , который не может быть захвачен или проигнорирован.

Остановленное задание может быть возобновлено как фоновое задание командой bg оболочки, или перемещено на передний план командой fg . В любом случае, оболочка соответственно перенаправляет ввод-вывод и посылает процессу сигнал SIGCONT , который заставляет операционную систему возобновить её выполнение. В оболочке Bash программа может быть запущена как фоновое задание добавлением амперсанда ( & ) в командную строку; её выход притом направляется на терминал (потенциально чередуясь с выходами других программ), однако в этом случае она не сможет читать с терминального входа.

Фоновый процесс, который пытается прочитать или записать в его , отправит сигнал SIGTTIN (для ввода) или SIGTTOU (для вывода). Эти сигналы по умолчанию останавливают процесс, но они могут также быть обработаны и другими способами. Оболочки часто отвергают заданное по умолчанию действие остановки SIGTTOU так, что фоновые процессы предоставят свой вывод по умолчанию управляющему терминалу. В Bash-совместимых оболочках, встроенная команда kill может сигнализировать заданиям по ID процесса, а также ID группы процесса — посылая сигнал на выполнение задания всей группе его процесса, и задания, заданные при помощи ID, должны «убиваться» посылкой префикса « % ». Kill может послать заданию любой сигнал, однако если намерение состоит в том, чтобы избавить систему от процессов, наиболее применимыми будут скорее всего сигналы SIGKILL и SIGTERM (по умолчанию). Задание, выполняющееся на переднем плане, может быть навсегда остановлено вводом символов команды «убить процесс» ( Ctrl + C ).

Примечания

  1. Здесь «задача» является нетехническим термином для некоторой активности, тогда как «процесс» и «задание» — конкретные понятия из области операционных систем
  2. IEEE Std 1003.1-2001, от 9 октября 2010 на Wayback Machine
  3. ID является абстрактной ссылкой оболочки на ресурс (группа процесса), управляемый внешне с помощью операционной системы, следовательно это — дескриптор
  4. IEEE Std 1003.1-2001, от 9 октября 2010 на Wayback Machine
  5. . Дата обращения: 14 ноября 2015. 29 октября 2015 года.
  6. Foreword by Bill Joy in Anderson, Gail; Paul Anderson. (неопр.) . — Prentice-Hall , 1986. — С. xvii. — ISBN 0-13-937468-X .

Литература

Ссылки

  • «Job Control», (англ.)
Источник —

Same as Управление заданиями