Использование и значение группы сеансов и процессов в Unix?


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

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

2 59

2 ответа:

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

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

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

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


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

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

стандарт POSIX говорит:

Если PID больше 0, сиг должен быть направлен процесс процесс, идентификатор которого равен PID-регулятора.

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

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

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

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

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

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