В операционной системе , соответствующей POSIX , группа процессов обозначает совокупность одного или нескольких процессов . [1] Помимо прочего, группа процессов используется для управления распределением сигнала ; когда сигнал направляется в группу процессов, сигнал доставляется каждому процессу, являющемуся членом группы. [2]
Аналогично, сеанс обозначает совокупность одной или нескольких групп процессов. [3] Процесс не может создать группу процессов, принадлежащую другому сеансу; кроме того, процессу не разрешено присоединяться к группе процессов, которая является членом другого сеанса, то есть процессу не разрешено мигрировать из одного сеанса в другой.
Когда процесс заменяет свое изображение новым изображением (путем вызова одной из exec
функций ), новое изображение подчиняется той же группе процессов (и, следовательно, сеансу), что и старое изображение.
Распределение сигналов по группам процессов формирует основу управления заданиями , используемого программами оболочки . Драйвер устройства TTY включает в себя понятие группы процессов переднего плана , в которую он отправляет сигналы, генерируемые прерываниями клавиатуры , в частности SIGINT ("interrupt", Control+ C), SIGTSTP ("terminal stop", + ) и SIGQUIT ("quit", + ). Он также отправляет сигналы SIGTTIN и SIGTTOU любым процессам, которые пытаются читать с терминала или записывать на него и которые не находятся в группе процессов переднего плана. Оболочка, в свою очередь, разделяет конвейеры команд , которые она создает, на группы процессов и контролирует, какая группа процессов является группой процессов переднего плана своего управляющего терминала , тем самым определяя, какие процессы (и, следовательно, какие конвейеры команд) могут выполнять ввод-вывод на терминал и с него в любой момент времени.ControlZControl\
Когда shell fork
является новым дочерним процессом для конвейера команд, как родительский процесс shell, так и дочерний процесс немедленно делают дочерний процесс лидером группы процессов для конвейера команд. Таким образом, гарантируется, что дочерний процесс является лидером группы процессов, прежде чем родитель или дочерний процесс начнут полагаться на это.
Если в Unix-подобной системе используется текстовый пользовательский интерфейс , сеансы используются для реализации сеансов входа в систему . Один процесс, лидер сеанса , взаимодействует с управляющим терминалом, чтобы гарантировать завершение всех программ, когда пользователь «завершает» терминальное соединение. (Если лидер сеанса отсутствует, ожидается, что процессы в группе процессов переднего плана терминала будут обрабатывать зависания.)
При использовании графического пользовательского интерфейса концепция сеанса в значительной степени теряется, а понятие сеанса ядра в значительной степени игнорируется. Графические пользовательские интерфейсы, например, где используется X display manager , используют другой механизм для реализации сеансов входа.
Системный вызов setsid
используется для создания нового сеанса, содержащего одну (новую) группу процессов, при этом текущий процесс является как лидером сеанса, так и лидером группы процессов этой единственной группы процессов. [4]
Группы процессов идентифицируются положительным целым числом, идентификатором группы процессов , который является (или был) лидером группы процессов. Группы процессов не обязательно должны иметь лидеров, хотя они всегда начинаются с одного. Сеансы идентифицируются идентификатором группы процессов лидера сеанса. POSIX запрещает изменение идентификатора группы процессов лидера сеанса.
Системный вызов setpgid
используется для установки идентификатора группы процессов процесса, тем самым либо присоединяя процесс к существующей группе процессов, либо создавая новую группу процессов в сеансе процесса, при этом процесс становится лидером группы процессов вновь созданной группы. [5]
POSIX запрещает повторное использование идентификатора процесса, если группа процессов с этим идентификатором все еще существует (т. е. если лидер группы процессов вышел, но другие процессы в группе все еще существуют). Тем самым он гарантирует, что процессы не могут случайно стать лидерами группы процессов.
Системный вызовkill
способен направлять сигналы как отдельным процессам, так и группам процессов. [2]
Набор процессов, который позволяет сигнализировать о связанных процессах.
Коллекция групп процессов [...]. Каждая группа процессов является членом сеанса.