Слово "субреапер" використовується в деяких відповідях. У пошуку Google також з'являються записи, де слово "щойно використано".
Як я можу зрозуміти, що таке "субреапер"?
Слово "субреапер" використовується в деяких відповідях. У пошуку Google також з'являються записи, де слово "щойно використано".
Як я можу зрозуміти, що таке "субреапер"?
Відповіді:
Це було реалізовано в Linux ядро 3.4 як прапор системного виклику prctl () .
На сторінці сторінки prctl(2)
:
[...] Підреактор виконує роль
init(1)
своїх процесів для нащадків. Після припинення процесу, який осиротів (тобто його найближчий батько вже припинився) і позначений як субреактор, найближчий ще живий предкаподавець отримаєSIGCHLD
сигнал та зможеwait(2)
в процесі виявити його статус припинення.
Процес може визначати себе як підреактор з prctl(PR_SET_CHILD_SUBREAPER)
. Якщо так, то це не init
(PID 1) , який стане батьком осиротілих дочірніх процесів , а найближчий живий прабатько, позначений як subreaper стане новим батьком. Якщо немає живих бабусь і дідусів, init
робить.
Причиною реалізації цього механізму стало те, що менеджерам / супервізорам служб простору користувачів (як upstart
, наприклад systemd
) потрібно відстежувати розпочаті послуги. Багато служб демонструються шляхом подвійного розгортання та неявно перепороднюються до PID 1. Менеджер сервісів більше не зможе приймати SIGCHLD
для них сигнали, і більше не відповідає за отримання дітей wait()
. Вся інформація про дітей втрачається в той момент, коли PID 1 очищає відновлювані процеси. Тепер процес управління диспетчером послуг може позначати себе як свого роду "суб-init", і тепер він може залишатися батьківським для всіх осиротілих процесів, створених запущеними службами. Усі SIGCHLD
сигнали будуть доставлені менеджеру служби.
У Linux, демон зазвичай створюється шляхом двічі роздвоєння з проміжним процесом, що закінчується після прищеплення онука. Це поширена методика уникнення зомбі-процесів . Сценарій init викликає дитину. Ця дитина знову відщеплюється і, таким чином, негайно виходить. Онук буде усиновлений компанією init
, який постійно закликає wait()
збирати статус виходу своїх дітей, щоб уникнути зомбі. З концепцією субреаперів менеджер сервісного простору користувача тепер стає новим батьком замість init
.