GNU/Linux >> Znalost Linux >  >> Linux

Linux – proces „subreaper“?

V některých odpovědích se používá slovo „subreaper“. Vyhledávání Google také zobrazí záznamy, kde je slovo „právě použité“.

Jak mohu pochopit, co je „subreaper“?

Přijatá odpověď:

Toto bylo implementováno do linuxového jádra 3.4 jako příznak systémového volání prctl().

Z prctl(2) manuálová stránka:

[…] Subreaper plní roli init(1) pro jeho potomka
procesy. Po ukončení procesu, který je osiřelý (tj. jeho
bezprostřední rodič již skončil) a označený jako
subreaper, obdrží nejbližší stále žijící předek subreaper SIGCHLD signál a být schopen wait(2) na procesu zjistit
stav ukončení.

Proces se může definovat jako subreaper pomocí prctl(PR_SET_CHILD_SUBREAPER) . Pokud ano, není to init (PID 1), který se stane rodičem osiřelých podřízených procesů, místo toho se novým rodičem stane nejbližší žijící prarodič, který je označen jako subreaper. Pokud neexistuje žádný žijící prarodič, init ano.

Důvodem implementace tohoto mechanismu bylo to, že manažeři/supervizoři služeb uživatelského prostoru (jako upstart , systemd ) potřebují sledovat své spuštěné služby. Mnoho služeb je démonizováno dvojitým rozvětvením a implicitně se přerodí na PID 1. Správce služeb již nebude moci přijímat SIGCHLD signály pro ně a už nemá na starosti sklízení dětí pomocí wait() . Veškeré informace o dětech jsou ztraceny v okamžiku, kdy PID 1 uklízí přerodičovské procesy. Nyní se proces správce služeb může označit jako jakýsi druh „sub-init“ a nyní může zůstat jako rodič pro všechny osiřelé procesy vytvořené spuštěnými službami. Vše SIGCHLD signály budou doručeny manažerovi služby.

V Linuxu se démon obvykle vytváří dvojitým forkováním, přičemž prostřední proces se ukončí po rozvětvení vnuka. Toto je běžná technika, jak se vyhnout zombie procesům. Skript init volá dítě. To dítě se znovu rozvětvuje, a tak okamžitě odejde. Vnuk bude adoptován init , který nepřetržitě volá wait() sbírat výstupní stav svých dětí, aby se vyhnuli zombie. S konceptem subreaperů se nyní správce služby uživatelského prostoru stává novým rodičem namísto init .


Linux
  1. Jak nainstalovat vtop na Linux

  2. Linux – Blokovat síťový přístup procesu?

  3. Jak funguje životní cyklus procesu Linux – nadřazený, podřízený a iniciační proces

  1. Jak zabít proces zombie na Linuxu

  2. Proces spouštění Linuxu

  3. Linux CreateProcess?

  1. Linux – Init Process:Předchůdce všech procesů?

  2. Úvod do Linuxových vláken – část I

  3. Příklady příkazů kill v Linuxu