Слово "субреапер" використовується в деяких відповідях. У пошуку 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.