PID emetteur d'un signal

PID emetteur d'un signal - C - Programmation

Marsh Posté le 24-02-2005 à 12:36:57    

Bonjour a toutes et a tous  
 
Je me pose une question meta physique en prog.
 
Contexte : Systeme expliotation UNIX, language C
 
 
J'aimerai savoir s'il y a moyen de connaitre le PID de l'emmeteur d'un
signal. Je m'explique :
 
Dans un programme je fais un fork et un execv.
Le processus fils fait sa vie tranquillement le pere refait un fork donc
maintenant 1 pere et deux fils sont dans la machine :-) ( ca commence a
faire du monde :-)) )
 
Le pere recoit le signal SIGUSR1 de la part d'un fils.
 
Suivant le fils, il va enclancher telle ou telle action.
 
COmment le pere peut il detecter le PID du fils emmeteur ?
 
Si une personne sait comment faire, je suis preneur
 
par avance merci
 

Reply

Marsh Posté le 24-02-2005 à 12:36:57   

Reply

Marsh Posté le 24-02-2005 à 12:48:55    

c'est un peu le bordel, il faut utiliser sigaction()
 
http://www.scit.wlv.ac.uk/cgi-bin/mansec?2+sigaction
 
avec SA_SIGINFO à vrai et alors tu recevra toute l'info que tu veux dans ton handler.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 24-02-2005 à 12:53:11    

Il faut que tu utilises la structure siginfo_t.
 
Voici un exemple de handler :
 

Code :
  1. void fin_fils(int sig, siginfo_t *info)
  2. {
  3. // Prise en compte de la mort du bon fils, il ne reste pas zombi
  4.     waitpid(info->si_pid,NULL,0);
  5.     printf("[%d]" terminé\n",info->si_pid);
  6. }


 
Je complète avec l'armement :
 

Code :
  1. struct sigaction action;
  2. action.sa_sigaction=(void *) fin_fils;
  3. action.sa_flags = SA_SIGINFO;
  4. sigaction(SIGUSR1, &action, NULL);


Message édité par Master_Jul le 24-02-2005 à 12:58:05
Reply

Marsh Posté le 28-02-2005 à 12:14:42    

Hello nraynaud et Master_Jul
 
merci pour vos reponses.
Je n'ai pas encore eu la disponibilite pour faire les essais, mais en tout cas merci.
 
Lsts Titof13

Reply

Marsh Posté le 04-03-2005 à 08:26:44    

Bonjur
 
J'arrive un peu en retard, mais j ai peut etre une idee. J'ai deja fait ce genre de chose, le principe c est que dans le pere tu prends ton pid via getpid() dans une variable int, et tu envoyes tes 32 octets de ton int en premier a ton fils avec sigusr1 pour 0 et sigusr2 pour 0. La grace a un systeme de decalage de bit tu peux donc envoyer le pid du pere a son fils. Ce fils retrouvera le int de depart grace egalement a un decalage de bits. Ainsi tu auras le PID du pere.
 
 
Le mieux encore par la suite est de conclure chaque envoye de signal du pere vers le fils par un petit signal dans l autre sens (fils -> pere) afin qu'il sache ce qu'il recoit. Ainsi tu es sur de la bonne reception de tes sigaux par le fils

Reply

Marsh Posté le 04-03-2005 à 13:01:57    

Salut
 

creusois a écrit :

Bonjur
 
J'arrive un peu en retard
 


 
Po grave, le principal c'est de participer...
 
J'ai deja mis en oeuvre une solution voisine de la tienne.  
Cependant mon souhait etait d'employer sigaction qui, je ne sais comment encore, remplie une structure de type siginfo_t.
Mon probleme c'est que je ne sais pas comment aller les infos de cette structure.  
A quel endroit je dois declarer le pointeur qui contiendra l'adresse de cette strcuture....
 
Il faut dire que ces derniers jours, j'ai eu du boulot par-dessus la tete et que je n'ai pas encore eu le temps de m'y replonger..
Un jour viendra ....
 
Merci encore pour ta reponse.
 
A bientot

Reply

Marsh Posté le 04-03-2005 à 18:00:51    

Je t'ai tout donné tout ce qu'il te faut hein. :/

Reply

Marsh Posté le 05-03-2005 à 13:08:23    

Master_Jul a écrit :

Je t'ai tout donné tout ce qu'il te faut hein. :/


 
lut Master...
 
Vi vi je sais et j'ai meme tout imprime mais po le temps en ce moment.
Entre le boulot, l'ecole et tout et tout c'est des journees de 48 h qu'il me faudrait.
 
Bye et merci encore man

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed