SHPORA.net :: PDA

Login:
ðåãèñòðàöèÿ

Main
FAQ

ãóìàíèòàðíûå íàóêè
åñòåñòâåííûå íàóêè
ìàòåìàòè÷åñêèå íàóêè
òåõíè÷åñêèå íàóêè
Search:
Title: | Body:

a.Grupuri de proces

De?i procesele într-un sistem UNIX sunt identificate printr-un numãr unic (PID), sistemul trebuie sã identifice uneori procesele dupã "grup". De exemplu, procesele cu un strãmo? comun care este un login shell sunt în general înrudite ?i de aceea toate aceste procese primesc semnale când un utilizator apasã tastele "Delete" sau "Break" sau când linia cãtre terminal este întreruptã. Nucleul utilizeazã identificatorul de grup al proceselor pentru a identifica grupurile de procese înrudite care trebuie sã primesacã un semnal comun pentru evenimente sigure. Acesta salveazã identificatorul de grup în tabela proceselor; procesele aflate în acela?i grup au acela?i ID de grup. Apelul sistem setpgrp iniþialiazeazã numãrul de grup pentru un proces ?i-l seteazã ca fiind egal cu valoarea ID de proces propriu. Sintaxa apelului sistem este:
^grp=setpgrp();
unde grp este noul numãr al grupului de procese.
Un fiu reþine numãrul de grup de proces al pãrintelui în timpul apelului sistem fork.
Setpgrp are, de asemenea, importanþã în setarea terminalului de control al unui proces.
#include <signal.h>
^main()
{
^register int i;
^setpgrp();
^for(i=0;i<10;i++)
{
^if(fork()==0)
{
/* procesul fiu */
^if(i[and]1)
^setpgrp();
^printf("pid=[procent]d pgrp=[procent]d pgrp=[procent]d
", getpid(), getpgrp());
^pause();/*se suspendă execuţa apelului sistem */
}
}
^kill(0,SIGINT);
}
În programul de mai sus, procesul anulează numărul său de grup şi crează 10 procese fii. Când sunt creaţi, fiecare proces fiu are acelaşi număr de grup cu al procesului părinte, dar procesele create în timpul iteraţiilor impare din ciclu resetează numărul de grup. Apelurile sistem getpid şi getpgrp întorc PID-ul şi ID-ul grupului (GID) ale procesului care se execută, iar apelului sistem pause suspendă execuţia procesului până când acesta recepţionează un semnal. La sfârşit, procesul părinte execută apelului sistem kill şi trimite un semnal de întrerupere tuturor proceselor din grupul său de procese. Nucleul trimite semnalul către 5 procese "pare" care nu şi-au schimbat propriu grup de procese în timp ce, cele 5 procese "impare" continuă ciclul.