Documente Academic
Documente Profesional
Documente Cultură
LABORATOR 5
Procese.
Procese
• Un proces reprezintă un program alcătuit dintr-o secvență
de instrucțiuni, cu o stivă proprie și un numărător de
program propriu.
• Proces este, din punctul de vedere al SO, unitatea
fundamentală de organizare a programelor.
• Procesele facilitează izolarea codului ce rulează,
administrarea distinctă, respectiv execuția paralelă a
programelor.
• Orice proces este creat de către un alt proces (excepție
procesul init – creat la lansare SO).
• Procesul creator: părinte.
• Procesul creat: fiu.
• Fiecare proces are un identificator unic: PID.
Comenzi specifice proceselor
• Comanda ps.
• pid și ppid.
• Comanda: ps –A –f
• Comanda: pstree
• Comanda: pstree -a
• Variabile speciale:
• $$ - pid
• $PPID – ppid
Exerciții
• Exercițiul 1:
• Să se creeze un script care lansează N procese (script-
uri).
• Fiecare proces fiu va afișa pe linii diferite:
• Index-ul procesului (din cele N lansate)
• pid
• ppid
• numele utilizatorului cu care a fost lansat
• ID-ul utilizatorului (comanda “id –u <utilizator>”)
• Fiecare proces fiu va returna un număr diferit (vezi
comanda exit).
• Procesul părinte va aștepta terminarea execuției fiecărui
proces fiu și va afișa valoarea returnată.
Crearea proceselor fiu în limbajul C
• Crearea unui proces fiu din C:
• Funcția: pid_t fork()
• Se crează o copie a procesului părinte, cu PID propriu, stivă,
numărător de program și variabile proprii.
• Fiul va avea inițial variabilele și valorile acestora identice cu
cele din procesul părinte.
• Orice modificare făcută în fiu va fi vizibilă doar în
procesul fiu.
• Se moștenesc și descriptorii de fișiere!
• Din punctul de vedere al SO părintele și fiul sunt procese
distincte.
Distincția dintre codul fiu și părinte
• Distincția dintre codul fiu și părinte prin valoarea returnată de funcția fork():
• -1: eroare.
• 0: în codul fiului.
• pid: în codul părintelui, unde pid este identificatorul de proces al fiului.
• Funcții de interogare:
• pid_t getpid()
• pid_t getppid()
• uid_t getuid()
• gid_t getgid()