b.Terminarea proces
Nucleul elibereazг apoi toatг memoria utilizatorului prin ?tererea regiunilor corespunzгtoare cu algoritmul detachreg ?i schimbг starea procesului оn zombie. El salveazг codul de stare al lui exit ?i timpii de execuюie utilizator ?i nucleu acumulaюi de proces ?i descendenюii lui оn tabela de procese
Nucleul mai scrie, de asemenea, o оnregistrare de contabilitate оntr-un fi?ier global de cont ce conюine diferite statistici de rulare cum ar fi identificatorul utilizatorului, utilizarea CPU-lui ?i a memoriei precum ?i cantitatea de operaюii de intrare/ie?ire pentru un proces.
La sfвr?it, nucleul deconecteazг procesul de la arborele de procese fгcвnd ca procesul 1 (init) sг adopte toate procesele sale fii. Aceasta presupune cг procesul 1 devine pгrinte legal al tuturor proceselor fii оn execuюie pe care procesul care a executat exit le-a creat.
Dacг vreunul din procesele de tip fiu este оn starea zombie, procesul ce executг exit trimite cгtre init semnalul de "terminare proces fiu" pentru ca init sг-l ?teargг din tabela proceselor; procesul care executг exit trimite ?i pгrintelui sгu un semnal de terminare proces fiu.Оn programul de mai jos un proces о?i creazг un fiu care о?i tipгre?te propriul PID ?i executг apelul sistem pause suspendвndu-?i execuюia pвnг cвnd prime?te un semnal. Procesul pгrinte tipгre?te PID-ul fiului ?i executг exit оntorcвnd PID-ul fiului drept cod de stare. Dacг apelul exit nu ar fi prezent, rutina de lansare procese ar apela exit la оntoarcerea programului din funcюia main. Procesul fiu creat de pгrinte continuг sг existe pвnг cвnd prime?te un semnal, chiar dacг procesul pгrinte s-a terminat.
^main()
{
^int child;
^if((chil=fork())==0)
{
^printf({child PID %d
", getpid());
^pause()/* suspendг execuюia pвnг la recepюionarea unui semnal*/
}
/* pгrinte */
^printf("child PID %d
", child);
^exit(child);
}