> > Frederic MANTEGAZZA wrote:
> >
> > J'ai un process qui a une routine d'interception repondant a un certain
> > signal.
> >
> > Lorsque ce signal arrive (en provenance d'un autre process), existe-t-il
> > un moyen pour retrouver le Pid du process l'ayant emis ?
> >
>
> Francois Cau wrote:
>
> Salut. Apparemment, il faut utiliser sigaction() pour specifier le handler
> appele lors de la reception de ce signal. On passe a sigaction une
> structure sigaction qui contient (entre autres) un champ sa_flags. Il faut
> donner la valeur SA_SIGINFO a ce champ. A ce moment la, le handler recevra
> 2 arguments supplementaires, dont le premier est un pointeur sur une
> structure siginfo , qui contient un champ si_pid (de type pid_t) qui est le
> "sending process ID".
> Ceci est specifique SVR4, et le sigaction() de linux est cense se conformer
> a SVR4... Par contre j'ai pas reussi a trouver (par grep) le define de
> SA_SIGINFO dans /usr/include/signal.h , inquietant...
>
> Je tire ca de "Advanced programming in Unix environment" de W. R. Stevens
> (Addison Wesley).
>
> Je serais interesse de savoir si ca marche...
>
Bon, apres essais, il s'avere que ce n'est pas possible d'utiliser le
flag SA_SIGINFO sous Linux, car ce n'est pas une specification POSIX (le
seul flag specifie par POSIX est SA_NOCLDSTOP).
Pas plus d'ailleurs que Unix de Silicon Graphix ni OpenVMS de Digital.
Comme c'est sur ces deux plateformes que je doit faire tourner ma
librairie, j'ai utilise une autre solution.
A titre d'info :
Dans le programme principal (qui doit recevoir le signal), j'ai defini
un trap handler sur le signal SIGCHLD, qui est emis lors de la mort d'un
process fils.
Dans ce trap handler, je fait un pid = wait(), et j'ai en retour le pid
du fils qui est mort.
Cela impose bien sur que le process dont on veut retrouver le Pid soit
un fils, et que cela ne pose pas de probleme que le fils meurt.
Dans mon cas, c'est bon (le fils en question est un process client qui
doit envoyer un truc via le reseau sur un serveur, et attendre le retour
d'une info, avant de la retransmettre au pere. Les infos circulent entre
le pere et ce process fils via un pipe non nomme).
Le flag POSIX SA_NOCLDSTOP permet lui de ne pas recevoir le signal
SIGCHLD lorsqu'un fils meurt.
En tout cas, merci de ton aide.
--
Frederic MANTEGAZZA Tel : (33) 476.20.76.17
DRFMC/SPSMS/MDN Fax : (33) 476.88.51.09
CEA-Grenoble e-mail : mantegazza@???
17, rue des Martyrs
38054 Grenoble Cedex 09