GNU/Linux >> Znalost Linux >  >> Linux

Jak systemd řeší smrt dítěte řízeného procesu?

Není.

Hlavní proces řeší smrt svých dětí normálním způsobem.

Toto je svět POSIX. Jestliže proces A rozvětvil B a proces B rozvětvil C, D a E; pak proces B je to, co vidí SIGCHLD a wait() stav od ukončení C, D a E. Proces A neví, co se stane s C, D a E, a to bez ohledu na systemd.

Aby si A uvědomil, že C, D a E končí, musí se stát dvě věci.

  • A musí se zaregistrovat jako "subreaper". systemd to dělá, stejně jako různí další správci služeb včetně upstart a nosh service-manager .
  • B musí mít exit() . Dělají to služby, které se pošetile, chybně a marně pokoušejí „dæmonizovat“.

(S kevent() se dá chytře na BSD. Ale to je otázka Linuxu.)


systemd má koncept hlavního procesu. V dokumentaci systemd je to označováno jako „hlavní servisní proces“ nebo jednoduše „hlavní proces“.

Příklad 4 v dokumentaci systemd.service popisuje, že hlavní proces je vypočítán při Type=forking .

Dokumentace pro Restart= v dokumentaci systemd.service popisují různé možnosti spuštění služby ve vztahu k hlavnímu procesu.

Zde je klíčový text z „příkladu 4“ odkazovaného výše:

systemd bude službu považovat za službu v procesu ofinitalizace, zatímco původní program stále běží. Jakmile itexit úspěšně a zůstane alespoň jeden proces (andRemainAfterExit=no), je služba považována za spuštěnou.

Tradiční démon se často skládá pouze z jednoho procesu. Pokud tedy po ukončení původního procesu zůstane pouze jeden proces, systemd bude tento proces považovat za hlavní proces služby. V takovém případě bude proměnná $MAINPID dostupná v ExecReload=,ExecStop=atd.

V případě, že zůstane více než jeden proces, systemd nebude schopen určit hlavní proces, takže nebude předpokládat, že jeden existuje. V takovém případě se $MAINPID nerozšíří na nic. Pokud se však proces rozhodne zapsat tradiční soubor PID, systemd bude schopen číst hlavní PID odtud. Nastavte prosím odpovídajícím způsobem PIDFile=.


Linux
  1. Jak Sticky Bit funguje?

  2. Jak funguje proces upgradu Ubuntu?

  3. Jak najít všechny podřízené procesy?

  1. Jak nastavím pracovní adresář nadřazeného procesu?

  2. Jak interně funguje copy_from_user z jádra Linuxu?

  3. Jak získat podřízený proces z rodičovského procesu

  1. Jak funguje příkaz ps?

  2. Jak funguje rozhraní zpětné smyčky

  3. Jak si Linux zachovává kontrolu nad CPU na jednojádrovém stroji?