Управление заданиями (Unix) - Job control (Unix)
В Unix и Unix-подобный операционные системы, контроль работы относится к контролю над рабочие места по ракушка, особенно в интерактивном режиме, где "работа" - это представление оболочки для группа процессов. Основные функции управления заданиями - это приостановка, возобновление или завершение всех процессов в группе заданий / процессов; более продвинутые функции можно выполнить, отправив сигналы на работу. Управление заданиями представляет особый интерес в Unix из-за его многопроцессорность, и его следует отличать от контроль работы как правило, что часто применяется к последовательному выполнению (пакетная обработка ).
Обзор
Когда используешь Unix или же Unix-подобный операционные системы через Терминал (или же эмулятор терминала ), пользователь изначально будет иметь только один запущенный процесс, их авторизоваться ракушка. Большинство задач[а] (список каталогов, редактирование файлов и т. д.) можно легко выполнить, позволив программе взять на себя управление терминалом и вернув управление оболочке при выходе из программы - формально, подключившись к стандартный ввод и стандартный вывод в оболочку, которая читает или записывает с терминала и улавливает сигналы, отправленные с клавиатуры, такие как сигнал завершения, возникающий при нажатии Контроль+C.
Однако иногда пользователь может захотеть выполнить задачу, используя терминал для другой цели. Задача, которая выполняется, но не получает ввод от терминала, называется запущенной «в фоновом режиме», в то время как единственная задача, которая получает ввод от терминала, находится «на переднем плане». Управление заданиями - это средство, разработанное для того, чтобы сделать это возможным, позволяя пользователю запускать процессы в фоновом режиме, отправлять уже запущенные процессы в фоновый режим, фоновые процессы на передний план, а также приостановить или завершить процессы.
Концепция работа сопоставляет концепцию (оболочки) отдельной команды оболочки с концепцией (операционной системы) возможного множества процессов, которые влечет за собой команда. Многопроцессорные задачи возникают потому, что процессы могут создавать дополнительные дочерние процессы, а одна команда оболочки может состоять из трубопровод нескольких взаимодействующих процессов. Например, команда для выбора строк, содержащих текст «заголовок», сортировки их по алфавиту и отображения результата в виде пейджер.
grep title somefile.txt | Сортировать | меньше
Это создает как минимум три процесса: один для grep, один для Сортироватьи один для меньше. Управление заданиями позволяет оболочке управлять этими связанными процессами как одним объектом, и когда пользователь вводит соответствующую комбинацию клавиш (обычно Контроль+Z), вся группа процессов приостанавливается.
Операционная система управляет заданиями как единый группа процессов, а задание - внутреннее представление такой группы оболочкой. Это определено в POSIX в качестве:[1]
Набор процессов, включающий конвейер оболочки и все производные от него процессы, которые находятся в одной группе процессов.
На вакансию может ссылаться ручка[b] называется идентификатор задания управления заданиями или просто идентификатор вакансии, который используется встроенные функции оболочки сослаться на работу. Идентификаторы вакансий начинаются с %
персонаж; % n
определяет работу п, пока %%
определяет текущую работу. Другие идентификаторы вакансий указаны POSIX.[2] В неформальном использовании номер может называться "номер задания" или "идентификатор задания", а в документации Bash идентификатор задания (с префиксом%) называется вакансии[3]
Управление заданиями и идентификаторы заданий обычно используются только в интерактивном режиме, где они упрощают обращение к группам процессов; в сценариях вместо этого используются PGID, поскольку они более точны и надежны, и действительно, управление заданиями по умолчанию отключено в сценариях bash.
История
Управление заданиями было впервые реализовано в Оболочка C Джим Кулп,[4] затем в МИПСА в Австрии, используя возможности 4.1BSD ядро. KornShell, разработанный в Bell Labs, адаптировал его и позже включил в версию SVR4 Оболочка Борна, и существует в большинстве современных оболочек Unix.
Команды
Стандарт POSIX определяет две команды для возобновления приостановленных заданий в фоновом режиме и на переднем плане соответственно. bg и фг. Они были смоделированы по образцу команд управления заданиями оболочки Korn.[5]
Выполнение
Обычно оболочка хранит список заданий в таблица вакансий. Напомним, что задание соответствует группе процессов, которая состоит из всех членов трубопровод и их потомки. В рабочие места
Команда отобразит список фоновых заданий, существующих в таблице заданий, вместе с их номерами заданий и состоянием задания (остановлено или запущено). Когда сессия заканчивается, когда пользователь выходит из системы (выходит из оболочки, что завершает лидер сессии процесс), процесс оболочки отправляет SIGHUP ко всем заданиям и ожидает завершения группы процессов перед завершением самого себя.
В отречься
Команда может использоваться для удаления заданий из таблицы заданий, чтобы при завершении сеанса дочерним группам процессов не отправлялся сигнал SIGHUP, а оболочка не ожидала их завершения. Таким образом они становятся сиротские процессы, и может быть прекращен операционной системой, хотя чаще это используется, чтобы процессы были приняты в этом (ядро устанавливает свой родительский процесс на init) и продолжает выполнение как демоны. Альтернативы для предотвращения прекращения работы включают: нету и используя оконечный мультиплексор.
Задание, выполняющееся на переднем плане, можно остановить, набрав символ приостановки (Ctrl-Z ). Это отправляет "конечную остановку" сигнал (SIGTSTP) в группу процессов. По умолчанию SIGTSTP заставляет процессы, принимающие его, останавливаться, и управление возвращается оболочке. Однако процесс может зарегистрировать обработчик сигнала или игнорировать SIGTSTP. Процесс также можно приостановить с помощью сигнала «стоп» (SIGSTOP), которые нельзя поймать или проигнорировать.
Задание, выполняющееся на переднем плане, можно прервать, набрав символ прерывания (Ctrl-C ). Это отправляет сигнал «прерывание» (SIGINT), который по умолчанию завершает процесс, хотя его можно переопределить.
Остановленное задание может быть возобновлено как фоновое задание с bg
встроенный, или в качестве работы переднего плана с фг
. В любом случае оболочка перенаправляет Ввод / вывод надлежащим образом и отправляет SIGCONT сигнал процессу, который заставляет операционную систему возобновить выполнение. В Баш, программу можно запустить как фоновое задание, добавив амперсанд (&
) в командную строку; его вывод направляется на терминал (потенциально чередующийся с выводом других программ), но он не может читать с ввода терминала.
Фоновый процесс, который пытается читать или писать в свой управляющий терминал отправлено SIGTTIN (для ввода) или SIGTTOU (для вывода) сигнал. Эти сигналы по умолчанию останавливают процесс, но с ними можно работать и другими способами. Оболочки часто отменяют действие остановки по умолчанию SIGTTOU, поэтому фоновые процессы по умолчанию доставляют свой вывод на управляющий терминал.
В Bash-совместимых оболочках убийство
встроенный (не / bin / kill
) может сигнализировать о заданиях по идентификатору задания, а также по идентификатору группы процессов - отправка сигнала заданию отправляет его всей группе процессов, а задания, указанные в идентификаторе задания, должны быть уничтожены с помощью префикса %
. убийство
может посылать любой сигнал на работу; однако, если цель состоит в том, чтобы избавить систему от процессов, сигналы СИГКИЛЛ и SIGTERM (по умолчанию), вероятно, наиболее применимы.
Смотрите также
Примечания
Рекомендации
- ^ IEEE Std 1003.1-2001, Раздел 3.201, Работа
- ^ IEEE Std 1003.1-2001, Раздел 3.203, Идентификатор задания управления заданиями
- ^ 7.1 Основы управления заданиями
- ^ Предисловие Билл Джой в Андерсон, Гейл; Пол Андерсон (1986). Полевое руководство по оболочке UNIX C. Прентис-Холл. п. xvii. ISBN 0-13-937468-X.
- ^ Единая спецификация UNIX, Выпуск 7 из Открытая группа; - Справочник по командам и утилитам, Единая спецификация UNIX, Выпуск 7 из Открытая группа. - Справочник по командам и утилитам,
дальнейшее чтение
- Маршалл Кирк МакКусик и Джордж В. Невилл-Нил (2004-08-02). «Управление процессами FreeBSD: группы процессов и сеансы». Дизайн и реализация операционной системы FreeBSD. Эддисон Уэсли. ISBN 0-201-70245-2.
внешняя ссылка
- «Контроль работы», Справочное руководство по Bash