b.Terminarea proces

[ ]
Procesele care au aparinut vechiului grup nu vor aparine ?i grupului urmtor. Nucleul parcurge descriptorii fi?ierelor deschise, nchizndu-le pe fiecare prin algoritmul intern close ?i elibereraz inodurile care au fost folosite pentru directorul curent ?i rdcina schimbat (dac exist) prin algoritmul iput.
Nucleul elibereaz apoi toat memoria utilizatorului prin ?tererea regiunilor corespunztoare cu algoritmul detachreg ?i schimb starea procesului n zombie. El salveaz codul de stare al lui exit ?i timpii de execuie utilizator ?i nucleu acumulai de proces ?i descendenii lui n tabela de procese
Nucleul mai scrie, de asemenea, o nregistrare de contabilitate ntr-un fi?ier global de cont ce conine diferite statistici de rulare cum ar fi identificatorul utilizatorului, utilizarea CPU-lui ?i a memoriei precum ?i cantitatea de operaii de intrare/ie?ire pentru un proces.
La sfr?it, nucleul deconecteaz procesul de la arborele de procese fcnd ca procesul 1 (init) s adopte toate procesele sale fii. Aceasta presupune c procesul 1 devine printe legal al tuturor proceselor fii n execuie 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 ctre init semnalul de "terminare proces fiu" pentru ca init s-l ?tearg din tabela proceselor; procesul care execut exit trimite ?i printelui su un semnal de terminare proces fiu.n programul de mai jos un proces ?i creaz un fiu care ?i tipre?te propriul PID ?i execut apelul sistem pause suspendndu-?i execuia pn cnd prime?te un semnal. Procesul printe tipre?te PID-ul fiului ?i execut exit ntorcnd 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 funcia main. Procesul fiu creat de printe continu s existe pn cnd prime?te un semnal, chiar dac procesul printe s-a terminat.
^main()
{
^int child;
^if((chil=fork())==0)
{
^printf({child PID %d
", getpid());
^pause()/* suspend execuia pn la recepionarea unui semnal*/
}
/* printe */
^printf("child PID %d
", child);
^exit(child);
}

:

Network | | | | | | | | | | | | | | | - | | | | | | | | | | | | | | | | | | | | | () | | | | | | | | | | | | | | | | () | Assembler | Basic, VB | Pascal | , ++ |