SIGCHLD

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 13 martie 2013; verificările necesită 10 modificări .
SIGCHLD
Descriere Starea procesului copil a fost schimbată
Mod implicit ignorat
Codurile SA_SIGINFO
CLD_EXITED terminare normală
CLD_KILLED crash (fără descărcare de memorie)
CLD_DUMPED crash cu memorie dump
CLD_TRAPPED s-a încheiat cu o capcană de depanare
CLD_OPRIT oprit
CLD_CONTINUED execuția a continuat după oprire

Pe sistemele POSIX , SIGCHLD este un semnal trimis atunci când starea unui proces copil se schimbă (încheiat, suspendat sau reluat).

SIGCHLD este o constantă întreagă definită în signal.h. Numele simbolice ale semnalelor sunt folosite în locul numerelor, deoarece numerele semnalelor pot diferi în diferite implementări.

Etimologie

SIG este un prefix de semnal comun , CHLD este o ortografie prescurtată în engleză.  copil - copil, obiect copil ( jargonul computerului englez ).

Utilizare

Pe Unix, un proces poate genera procese „copil” cu un apel de sistem fork()sau variații ale acestora. Procesul părinte, dacă există, este notificat de către sistem că procesele copil s-au încheiat (sau starea lor s-a schimbat) cu semnalul SIGCHLD. Procesul părinte nu ar trebui să ia nicio măsură pentru a face acest lucru. Semnalul poate fi ignorat dacă nu trebuie procesat (este ignorat implicit).

Procese zombie

Procesul copil la terminare devine un „zombie” - o intrare goală în tabelul de proces care stochează informații despre procesul încheiat (mai precis, codul de ieșire) - până când procesul părinte primește aceste informații folosind un apel de sistem wait()sau se încheie singur.

În programele de scurtă durată, prezența „zombiilor” este destul de normală - zombii nu ocupă multe resurse și dispar odată cu terminarea procesului părinte. Dar programatorii îngrijiți se ocupă întotdeauna de manipularea „zombiilor”. În general, pentru a preveni acumularea de „zombi”, programul ar trebui să utilizeze handlerul de semnal SIGCHLD cu un apel wait(), dar acest lucru nu este deloc necesar, dacă programul care apelează nu face nimic în handlerul SIGCHLD, cu excepția așteptării, atunci puteți pur și simplu seta acest handler pentru SIG_IGN și procesele zombie va fi colectat [1] automat. Trebuie remarcat aici că setarea SIGCHLD la SIG_IGN este compatibil POSIX.1-2001 și nu compatibil POSIX.1-1990.

instalare Perl _

$SIG{'CHLD'}="IGNORE"

setează de fapt un handler cu procesele zombie, așa cum este descris mai sus.

Python la

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

face la fel.

Note

  1. microHOWTO: Recoltați procesele zombie folosind un handler SIGCHLD . www.microhowto.info. Preluat la 4 mai 2016. Arhivat din original la 10 mai 2016.