SIGCHLD

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 13. března 2013; kontroly vyžadují 10 úprav .
SIGCHLD
Popis Stav podřízeného procesu se změnil
Výchozí ignoroval
SA_SIGINFO kódy
CLD_EXITED normální ukončení
CLD_KILLED pád (žádný výpis paměti)
CLD_DUMPED havárie s výpisem paměti
CLD_TRAPPED skončilo debug pastí
CLD_STOPPED zastavil
CLD_CONTINUED provádění pokračovalo po zastavení

Na systémech POSIX je SIGCHLD signál odeslaný, když se změní stav podřízeného procesu (ukončen, pozastaven nebo obnoven).

SIGCHLD je celočíselná konstanta definovaná v signal.h. Místo čísel se používají symbolické názvy signálů, protože čísla signálů se mohou v různých implementacích lišit.

Etymologie

SIG je běžná signální předpona , CHLD je zkrácený anglický pravopis.  dítě - dítě, dětský objekt (anglický počítačový žargon ).

Použití

V Unixu může proces zplodit „podřízené“ procesy se systémovým voláním fork()nebo jeho variantami. Nadřazený proces, pokud existuje, je systémem upozorněn, že podřízené procesy byly ukončeny (nebo se změnil jejich stav) signálem SIGCHLD. Nadřazený proces by k tomu neměl provádět žádnou akci. Signál lze ignorovat, pokud jej není třeba zpracovat (ve výchozím nastavení je ignorován).

Zombie procesy

Z podřízeného procesu se po ukončení stává „zombie“ – prázdná položka v tabulce procesů, ve které jsou uloženy informace o ukončeném procesu (přesněji výstupní kód) – dokud nadřazený proces tyto informace neobdrží pomocí systémového volání wait()nebo se sám neukončí.

V programech s krátkou životností je přítomnost "zombie" zcela normální - zombie nezabírají mnoho zdrojů a zmizí s ukončením rodičovského procesu. Ale úhlední programátoři se vždy postarají o manipulaci se „zombiemi“. Obecně platí, že pro zamezení hromadění „zombie“ by měl program používat obsluhu signálu SIGCHLD s voláním wait(), ale není to vůbec nutné, pokud volající program v handleru SIGCHLD nedělá nic kromě čekání, pak můžete jednoduše nastavit tento handler pro SIG_IGN a procesy zombie budou shromažďovány [1] automaticky. Zde je třeba poznamenat, že nastavení SIGCHLD na SIG_IGN je kompatibilní s POSIX.1-2001 a nikoli s POSIX.1-1990.

Instalace Perlu _

$SIG{'CHLD'}="IGNORE"

ve skutečnosti nastaví handler na zpracování zombie procesů, jak je popsáno výše.

Python at

signal.signal(signal.SIGCHLD, signal.SIG_IGN)

dělá totéž.

Poznámky

  1. microHOWTO: Reap zombie procesy pomocí SIGCHLD handleru . www.microhowto.info. Získáno 4. 5. 2016. Archivováno z originálu 10. 5. 2016.