<p>34. Группы процессов, сессии и управление заданиями</p>

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

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

Группы процессов, сессии и управление заданиями будут рассмотрены в этой главе.

34.1. Краткий обзор

Группа процессов — это набор из одного или нескольких процессов с одним и тем же идентификатором PGID (process group identifier — идентификатор группы процессов). Этот идентификатор представляет собой число того же типа (pid_t), что и идентификатор процесса. В каждой группе есть свой лидер — процесс, который создал эту группу и чей идентификатор становится ее PGID. Новый процесс наследует PGID своего родителя.

Группа процессов имеет жизненный цикл — период времени, который начинается с создания группы лидером и заканчивается, когда группу покидает ее последний участник. Чтобы покинуть группу, процесс должен либо завершиться, либо присоединиться к другой группе. Лидер группы процессов может не быть ее последним участником.

Сессия — это набор групп процессов. Членство процесса в сессии определяется идентификатором SID (session identifier — идентификатор сессии), который по аналогии с PGID является числом типа pid_t. Лидером сессии является процесс, который ее создал, и чей идентификатор используется в качестве SID. Новый процесс наследует идентификатор SID своего родителя.

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

В любой момент времени одна из групп процессов в сессии является активной, а остальные — фоновыми. Только процессы из активной группы могут считывать ввод из контролирующего терминала. Сигнал, сгенерированный пользователем в терминале с помощью комбинации клавиш, передается всем участникам активной группы процессов. В число этих комбинаций входят прерывание (обычно Ctrl+C), которое генерирует сигнал SIGINT, выход (обычно Ctrl+\), генерирующий сигнал SIGQUIT, и приостановка (обычно Ctrl+Z), передающая сигнал SIGTSTP.

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

В Linux идентификаторы PGID и SID любого процесса можно определить с помощью файлов вида /proc/PID/stat. Мы также можем определить идентификатор устройства контролирующего терминала (имеющий вид десятичного числа, состоящего из основного и дополнительного идентификаторов) и идентификатор его процесса. Больше подробностей ищите на справочной странице proc(5).

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

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

Группы процессов иногда можно применять не только для управления заданиями. Они имеют два полезных свойства: родительский процесс может ожидать любого из своих потомков в определенной группе (см. подраздел 26.1.2), и сигнал может быть отправлен сразу всем участникам группы (см. раздел 20.5).

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

Перейти на страницу:

Похожие книги