Documente Academic
Documente Profesional
Documente Cultură
Daca se doreste ca un proces sa poata comunica cu un alt proces, trebuie sa se foloseasca mecanisme de comunicare
speciale gestionate de catre kernel.
O caracteristica importanta a semnalelor este ca ele sunt asincrone, asta inseamna ca un proces poate primi un
semnal de la un alt proces in orice moment, iar procesul care a primit semnalul trebuie sa fie pregatit sa raspunda.
Daca un semnal apare in timpul executiei unui apel sistem, acest apel se incheie prin returnarea unui cod de eroare
(EINTR) si ramane in sarcina procesului sa refaca apelul intrerupt.
Exista numeroase semnale care pot fi accesate folosind constatele lor simbolice aferente.
Lista intreaga de semnale se poate vedea daca se ruleaza in terminal comanda: kill -l.
Cele mai frecvent utilizate semnale ar fi: SIGINT, SIGALRM, SIGUSR1, SIGUSR2, SIGKILL, SIGSTOP.
Orice semnal are asociata o actiune ce va fi executata de catre kernel asupra unui proces atunci cand procesul
primeste semnalul.
Deci, atunci cand intrerupem programul de la tastatura (trasmitem semnalul SIGINT), procesul isi opreste executia.
Acesta este handlerul semnalului, adica ce se intampla ca urmare a semnalului (sau mai precis actiunea ce va fi executata
de catre kernel).
Insa alternativ procesul poate specifica pentru un anumit semnal, propria rutina de tratare.
Handler este o referinta catre o functie ce va fi folosita ca rutina de tratare pentru semnalul respectiv.
Nu este nevoie de (void) inainte de signal.
Functia Signal leaga semnalul dat in parametrul 1 (SIGINT) de functia data in parametrul 2.
Linia cu signal din functia handler, desi deja s-a creat o legatura intre semnalul sigint si handler in functia main, este relavanta
in functie de versiunea compilatorului. Pe versiuni mai noi de compilatoare C nu mai este nevoie de ea. Insa pe versiuni mai
vechi de compilatoare care erau instalate pe Linux era nevoie de refacerea legaturii dintre semnal si rutina de tratare
(handler) deoarece dupa primirea unui semnal se revenea la handlerul implicit (terminarea executiei programului).
Daca se doreste realizarea unui program similar dar care sa raspunda la secventa Ctrl-Z (SIGTSTP) trebuie schimbat doar
apelul signal:
Fiecare proces dispune de un ceas pe care il poate folosi pentru a-si trimite semnale de tipul SIGALRM dupa atingerea unui
anumit interval de timp.
Apelul sistem alarm asteapta n secunde dupa care trasmite semnalul SIGALRM.
Daca dorim sa trimitem un semnal altui proces putem utiliza apelul sistem kill.
Sigaction era utilizat in locul lui signal pentru ca pe compilatoarele vechi daca in timpul rularii unui handler aparea din nou
un semnal inainte de refacerea legaturii, pentru semnalul initial se revenea la rutina implicita.