Управление заданиями (Unix)


В Unix и Unix-подобных операционных системах управление заданиями относится к управлению заданиями оболочкой , особенно в интерактивном режиме, где «задание» — это представление оболочки для группы процессов . Основными функциями управления заданиями являются приостановка, возобновление или завершение всех процессов в задании/группе процессов; более сложные функции могут быть выполнены путем отправки сигналов в задание. Управление заданиями представляет особый интерес в Unix из-за его многопроцессорности , и его следует отличать от управления заданиями в целом, которое часто применяется к последовательному выполнению ( пакетной обработке ).

При использовании Unix или Unix-подобных операционных систем через терминал (или эмулятор терминала ) у пользователя изначально будет запущен только один процесс — его оболочка входа в систему . Большинство задач [a] (листинг каталогов, редактирование файлов и т. д.) можно легко выполнить, позволив программе взять на себя управление терминалом и вернув управление оболочке при выходе из программы — формально, путем присоединения к стандартному вводу и стандартному выводу к оболочка, которая читает или пишет с терминала и перехватывает сигналы, отправляемые с клавиатуры, такие как сигнал завершения, возникающий в результате нажатия + .ControlC

Однако иногда пользователю может понадобиться выполнить задачу, используя терминал для другой цели. Говорят, что задача, которая выполняется, но не получает ввод с терминала, выполняется «в фоновом режиме», в то время как единственная задача, которая получает ввод от терминала, находится «на переднем плане». Управление заданиями — это средство, разработанное для того, чтобы сделать это возможным, позволяя пользователю запускать процессы в фоновом режиме, отправлять уже запущенные процессы в фоновый режим, переводить фоновые процессы на передний план и приостанавливать или завершать процессы.

Концепция задания сопоставляет концепцию (оболочки) одной команды оболочки с концепцией (операционной системы) возможного множества процессов, которые влечет за собой эта команда. Задачи с несколькими процессами возникают потому, что процессы могут создавать дополнительные дочерние процессы, а одна команда оболочки может состоять из конвейера нескольких взаимодействующих процессов. Например, команда для выбора строк, содержащих текст «заголовок», сортировки их по алфавиту и отображения результата в пейджере .

Это создает как минимум три процесса: один для grep , один для sort и один для less . Управление заданиями позволяет оболочке управлять этими связанными процессами как одним целым, и когда пользователь нажимает соответствующую комбинацию клавиш (обычно + ), вся группа процессов приостанавливается.ControlZ

Задания управляются операционной системой как единая группа процессов , и задание является внутренним представлением такой группы в оболочке. Это определяется в POSIX как: [1]