Что происходит с сеансом Unix при завершении лидера сеанса?

Что происходит с сеансом Unix при завершении лидера сеанса?

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

Я не могу найти документацию, касающуюся того, что происходит с сеансом и его процессом, если, например, дочерний процесс завершает лидер сеанса, пока выполняются несколько фоновых процессов и другой активный процесс.

Мои тесты показывают, что все процессы в сеансе убиваются, но как?
Получают ли они какой-то определенный сигнал?
Описан ли этот случай в стандарте POSIX? И если да, можете ли вы предоставить какие-то ссылки?

решение1

Вы не единственный, кого озадачивают сессии POSIX; Леннарт Пёттеринг (он знаменитый systemd)тоже озадачен.

Насколько кто-либо может сказать, когда умирает лидер сессии, initон наследует осиротевшую сессию и

  • Все процессы-участники сеанса в группе процессов переднего плана (если таковые имеются) получают SIGHUP.

  • Процессы-участники сеанса, не входящие в группу переднего плана, не получают никаких сигналов.

Смотрите также:

Если терминал отключается из-за зависания модема, а линия не была локальной, то лидеру сеанса отправляется SIGHUP. [...] Когда лидер сеанса умирает, SIGHUP отправляется всем процессам в группе процессов переднего плана. [...] Таким образом, если терминал отключается, а лидер сеанса является оболочкой управления заданиями, то он может справиться с делами для своих потомков, например, отправив им снова SIGHUP. Если, с другой стороны, лидер сеанса является невинным процессом, который не перехватывает SIGHUP, он умрет, и все процессы переднего плана получат SIGHUP.

Андрис Брауэр,Ядро Linux, раздел 10.3 "Сессии".

Связанный контент