Использование и значение сеанса и группы процессов в Unix? - PullRequest
71 голосов
/ 01 июля 2011

Процессы Unix имеют идентификатор сеанса и являются частью группы процессов - которую можно изменить / запросить с помощью таких функций, как setsid () / getpgrp ().

Однако понятие группы процессов и сеанса всегда ускользало от меня, кто-нибудь мог объяснить, какое значение имеют отдельные сеансы и группы процессов - почему / когда кто-то хочет создать новый сеанс или поместить несколько процессов в один и тот жесеанс и / или группа процессов?

Ответы [ 2 ]

86 голосов
/ 02 июля 2011

A группа процессов - это набор связанных процессов, о которых можно сигнализировать одновременно.

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

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

Например, если вы запускаете some_app из оболочки, оболочка создает для него новую группу процессов и делает ее приоритетной.группа процессов сессии.(some_app может создать некоторые дочерние процессы; по умолчанию они будут частью одной и той же группы процессов.) Если вы затем нажмете ^Z, группа процессов some_app сообщит о ее остановке;и группа процессов оболочки снова переключается на группу процессов переднего плана.Тогда, например, bg %1 снова запустит группу процессов some_app, но продолжит работать в фоновом режиме.


Стандарт POSIX.1-2008 довольно читабелен (по крайней мере, я так думаю!) - взгляните на определения и соответствующие разделы "General Terminal Interface" главы.

7 голосов
/ 01 июля 2011

Оболочки управления заданиями постоянно манипулируют сессиями или группами процессов. Вы можете отправить один и тот же сигнал всем процессам в группе процессов одним вызовом функции POSIX kill().

Стандарт POSIX гласит:

Если pid больше 0, sig отправляется процессу, чей идентификатор процесса равен pid.

Если pid равен 0, sig отправляется всем процессам (за исключением неопределенного набора системных процессов), чей идентификатор группы процессов равен идентификатору группы процессов отправителя и для которого процесс имеет разрешение на отправку сигнала .

Если pid равен -1, sig должен отправляться всем процессам (за исключением неопределенного набора системных процессов), для которых процесс имеет разрешение на отправку этого сигнала.

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

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

Когда вы манипулируете программами на переднем или заднем плане, вы используете группы процессов.

Есть также контрольные терминалы, о которых нужно беспокоиться; сигналы, генерируемые управляющим терминалом, могут отправляться всем программам в группе процессов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...