5. Terminarea unui proces

Acum că știm ce se întâmplă când un proces este creat, hai să aflăm ce se întâmplă când nu mai avem nevoie de el. Să nu ziceți că nu v-am avertizat, dar uneori Linux-ul poate deveni destul de…să zicem, “întunecat”…

Un proces poate ieși folosind apelul de sistem _exit, ceea ce va duce la eliberarea resurselor pe care procesul le folosea pentru realocare. Așa că în momentul în care un proces este gata de terminare (închidere), anunță kernelul motivul terminării cu ajutorul a ceva ce este denumit statusul terminării. De cele mai multe ori un status cu valoarea 0 înseamnă că procesul a reușit. Totuși, asta nu este destul pentru a opri complet un proces. Procesul părinte trebuie să știe de oprirearea (terminarea) procesului copil prin utilizarea unui apel de așteptare de sistem, practic acesta verificând status-ul opririi procesului copil. Știu ca sună un pic grotesc, dar apelul de așteptare este necesar. În fond, care părinte n-ar dori sa știe cum a murit copilul sau?

Mai există o metodă pentru a realiza terminarea unui proces și implica folosirea semnalelor, pe care le vom discuta curând.

Procesele orfan

În momentul în care procesul părinte se oprește (moare) înaintea procesului copil, kernelul știe ca nu va mai primi un apel de așteptare, așa că transformă acele procese în “orfani” și le transferă în responsabilitatea init (vă mai amintiți? mama tuturor proceselor). Init în final, va genera apelul de sistem de așteptare pentru aceste procese orfan, în așa fel încât să se poată închide corespunzător.

Zombie Processes

Ce se întâmpla când un proces copil se închide (termină) iar procesul părinte nu a trimis apelul de așteptare? Totuși, ne dorim să putem să vedem cum a fost închis (terminat) procesul copil. Chiar dacă acel proces a fost terminat, kernelul transformă procesul copil într-un proces zombie. Totuși, resursele pe care un proces copil le folosește sunt, de fapt, eliberate, chiar dacă există o înregistrare în tabelul proceselor pentru procesul zombie. Procesele zombie de asemenea nu pot fi oprite (terminate), din moment ce tehnic sunt “moarte” și nu puteți folosi semnale pentru a le putea opri. În final dacă procesul părinte trimite un apel de sistem de așteptare, procesul zombie va dispărea. Acest proces este cunoscut și sub numele de “secerare”. Dacă procesul părinte nu trimite un apel de așteptare, init va adopta procesul zombie și automat va trimite apelul de așteptare și va șterge procesul zombie. Poate fi un lucru destul de problematic să aveți prea multe procese zombie, din moment ce ocupă spațiu în tabelul proceselor, și, dacă aceasta se umple nu va mai putea rula alte procese care vor fi lansate ulterior.


Exerciții

Nici un exerciuțiu pentru această lecție.


Lasă un răspuns

Adresa ta de email nu va fi publicată.

Acest site folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.