Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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

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


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

Ответ 2

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

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

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

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

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

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

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

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

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