Procesul zombie

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Un proces zombie (proces defunct) in Unix si Unix-like de operare sisteme este un proces de calculator care, în ciuda faptului că a terminat sale de execuție , are încă un PID și un bloc de control de proces , necesar pentru a permite acestuia procesul părinte să citească ei valoare. Ieșire .

Originea termenului

Termenul proces zombie provine din definiția comună a unui zombie : o persoană care nu este complet moartă . În urma acestei metafore , procesul copilului este mort, dar nu a fost încă recoltat de marea mașină de tuns iarba (moartea personificată are o coasă cu el).

Originea proceselor zombie

Când un proces se termină, toată memoria și resursele asociate sunt eliberate astfel încât să poată fi utilizate de alte procese. Cu toate acestea, blocul de control al procesului rămâne în tabelul procesului, astfel încât procesul părinte să-și poată citi valoarea de ieșire executând wait() sistem wait() , după care procesul zombie este eliminat definitiv. Apelul de așteptare poate fi efectuat într-un cod secvențial normal, dar, mai frecvent, este invocat în cadrul unui handler al semnalului SIGCHLD , care este trimis unui proces părinte ori de câte ori procesul său copil moare. După eliminarea procesului zombie, PID-ul și blocul de control al procesului pot fi refolosite.

Când procesul părinte nu invocă apelul sistemului de așteptare , procesul zombie continuă să rămână în tabelul procesului: în unele cazuri, acest lucru se face în mod intenționat, de exemplu, atunci când procesul părinte, creând un nou proces copil, dorește să se asigure că are un alt PID decât un copil creat anterior abia terminat.

POSIX 0.1-2,001 Standardul , spre deosebire de POSIX.1-1990 anterioare, vă permite să ignore în mod explicit semnalul SIGCHLD, setarea SIGN IGN ca administrator , astfel încât să se poată renunța la valoarea de ieșire a unui proces și a împiedica devenind zombi. Acest comportament este urmat, de exemplu, de sistemele de operare bazate pe Linux (începând de la versiunea 2.6 a kernel - ului ) și de HP-UX , în timp ce alte sisteme, cum ar fi sistemele istorice BSD și UNIX System V , urmează comportamente diferite care utilizează așteptați singura modalitate sigură de a evita crearea de procese zombie. [1]

Identificarea proceselor zombie

Procesele zombie pot fi identificate din ieșirea comenzii ps Unix având un „Z” în coloana STAT. Procesele zombie care persistă mai mult de o perioadă scurtă de timp indică de obicei o eroare în programul părinte. Așa cum se întâmplă cu alte tipuri de scurgeri de memorie , prezența câtorva procese zombie nu îngrijorează în sine, dar poate prezenta o problemă care, în cazul încărcărilor mai mari ale sistemului, ar deveni gravă. Deoarece nu există memorie alocată pentru procesele zombie în afară de blocul de control al procesului în sine, principala problemă nu este consumul de memorie, ci epuizarea PID-urilor disponibile și completarea tabelului de proces, ceea ce ar duce la imposibilitatea de a crea noi proceselor . [2]

Eliminarea proceselor zombie

Pentru a ucide un proces zombie în cazul tipic în care procesul părinte nu își recuperează valoarea de ieșire, este necesar să eliminați procesul părinte , de exemplu, trimițându-i un semnal SIGTERM sau SIGKILL .

Procedând astfel, procesul zombie devine un proces orfan , care este imediat adoptat de init, care execută periodic waitpid() wait() sau waitpid() , omorând astfel propriile procese copil zombie.

Notă

  1. ^ sigaction linux man page , pe linux.die.net .
  2. ^ așteptați pagina man linux , pe linux.die.net .

Elemente conexe

linkuri externe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT