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.
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 ).
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).
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éž.
POSIX signály | |||
---|---|---|---|
| |||
|