SHPORA.net :: PDA

Login:
đćăèńòđàöèÿ

Main
FAQ

ăóìàíèòàđíûć íàóêè
ćńòćńòâćííûć íàóêè
ìàòćìàòèśćńêèć íàóêè
òćőíèśćńêèć íàóêè
Search:
Title: | Body:

b.Terminarea proces

Procesele care au aparținut vechiului grup nu vor aparține ?i grupului următor. Nucleul parcurge descriptorii fi?ierelor deschise, închizându-le pe fiecare prin algoritmul intern close ?i elibererază inodurile care au fost folosite pentru directorul curent ?i rădăcina schimbată (dacă există) prin algoritmul iput.
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);
}