Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1073 connectés 

  FORUM HardWare.fr
  Programmation
  C

  PID emetteur d'un signal

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

PID emetteur d'un signal

n°992276
titof13
Posté le 24-02-2005 à 12:36:57  profilanswer
 

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
 

mood
Publicité
Posté le 24-02-2005 à 12:36:57  profilanswer
 

n°992287
nraynaud
lol
Posté le 24-02-2005 à 12:48:55  profilanswer
 

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
n°992294
Master_Jul
Posté le 24-02-2005 à 12:53:11  profilanswer
 

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
n°995618
titof13
Posté le 28-02-2005 à 12:14:42  profilanswer
 

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

n°1000336
creusois
Posté le 04-03-2005 à 08:26:44  profilanswer
 

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

n°1000589
titof13
Posté le 04-03-2005 à 13:01:57  profilanswer
 

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

n°1001099
Master_Jul
Posté le 04-03-2005 à 18:00:51  profilanswer
 

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

n°1001718
titof13
Posté le 05-03-2005 à 13:08:23  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  PID emetteur d'un signal

 

Sujets relatifs
Signal ctrl-Dsignal ctrl + d
[C]Valeur en volt de la tension d'un signal Audio en entrée[bash] killer un pid (Débutant)
Emetteur automatique de mail.algo, decodage signal numerique
POSIX Que faire apres avoir attrape un signalSignal Handler (segmentation fault)
[QT] J'arrive pas à connecter mon signalcherche composant visualisation signal sonore
Plus de sujets relatifs à : PID emetteur d'un signal


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR