Використання та значення групи сеансів та процесів в Unix?


83

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

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

Відповіді:


104

Група процесів - це сукупність пов’язаних процесів, про які можна сигналізувати одночасно.

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

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

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


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


3
Це дуже гарне пояснення з додатковою інформацією, яка могла з’явитися як запитання пізніше
GP92,

@MatthewSlattery є terminalі terminal deviceзгадуються в документі одне і те ж?
alhelal

12

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

Стандарт POSIX говорить:

Якщо pid більше 0, sig повинен бути надісланий процесу, ідентифікатор процесу якого дорівнює pid.

Якщо pid дорівнює 0, sig має надсилатися всім процесам (за винятком невстановленого набору системних процесів), ідентифікатор групи процесів яких дорівнює ідентифікатору групи процесів відправника, і для яких процес має дозвіл надсилати сигнал.

Якщо pid дорівнює -1, sig має надсилатися всім процесам (крім невизначеного набору системних процесів), для яких процес має дозвіл надсилати цей сигнал.

Якщо pid від’ємний, але не -1, sig повинен надсилатися всім процесам (за винятком невстановленого набору системних процесів), ідентифікатор групи процесів яких дорівнює абсолютному значенню pid, і для яких процес має дозвіл надсилати сигнал .

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

Коли ви маніпулюєте програмами на передній або задній план, ви використовуєте групи процесів.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.