On Nov 15, 2003 at 17:53, Mihai RUSU <[EMAIL PROTECTED]> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> Salut
> 
> Citisem mai demult (si nu reusesc sa gasesc unde) ca atunci cand se 
> intoarce dintr-un system call, kernelul se uita la coada de socket "for 
> delivery" a procesului si apeleaza handlerele semnalelor respective.
> 
> Ce ma intereseaza e sa stiu, doar atunci apeleaza handlerele ? Daca am 
> procesul in userspace nu mai primesc nici un semnal ? (pt mine ca 
> programator a primi un semnal e echivalent cu a mi se apela handlerul de 
> semnal :)).

Primesti cand esti scheduled urmatoarea data. Quanta curenta nu ti-o
intrerupe, seteaza un flag ca ai primit SIG_xxx si data urmatoarea cand
procesul tau se intoarce dintr-un syscall sau e scheduled din nou, il
primeste.
> 
> Deci pot fi intrerupt pt a mi se apela handlerele semnalelor ? Daca da 
> cand ?

Practic oricand din punctul tau (procesului tau) de vedere (tu nu ai cum
sa stii cand apare un context-switch si cand esti re-scheduled).
Vezi ca sunt o gramada de libcall-uri care sunt unsafe de facut dintr-un
signal handler tocmai din cauza asta (ca nu stii cand esti intrerupt). 
Printre ele malloc/free.
> 
> Ma intereseaza in special pt linux (deci daca stiti ca variaza in functie 
> de versiunea de kernel specificati si versiunile), dar si pt *BSD si 
> Solaris.

Nu stiu cand sunt delivered exact pe alte sisteme, dar chestia ca e
unsafe sa chemi anumite functii dintr-un signal handler e valabila peste
tot (cred ca de fapt asta te intereseaza pe tine).


Andrei

--- 
Detalii despre listele noastre de mail: http://www.lug.ro/


Raspunde prin e-mail lui