Se connecter / S'enregistrer

Résolu Langage C pb signaux

Solutions (6)
Tags :
  • Programmation
|
Bonjour,

j'ai un probléme avec les signaux

je configure le signaux SIGUSR1 de cette façons :

  1. void handler2(int sig){
  2. printf("fils >> aie \n") ;
  3. }
  4.  
  5. struct sigaction act2;
  6. act2.sa_handler = handler2;
  7. sigfillset(&act2.sa_mask);
  8.  
  9. nkp = sigaction(SIGUSR1,&act2,NULL);


aprés je fais une boucle dans lequelle le signal doit s'éxécuter(kill( pid , SIGUSR1))
mais aubout du 2éme tour de boucle le signale ne s'affiche plus :) 

je ne sais pas comment faire car aprés sa 1er éxécution le signal ce réinitialise

merci d'avance pour votre aide :) 
Contenus similaires
Meilleure solution
partage
|
Désolé je dis des bêtises, je dois confondre avec signal() :) 
J'ai testé en reprenant les bouts de code que tu donnes de la façon suivante:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <signal.h>
  4. #include <unistd.h>
  5.  
  6. void mon_handler(int sig) {
  7. printf("*");
  8. fflush(stdout);
  9. }
  10.  
  11. int main() {
  12. struct sigaction a;
  13. a.sa_handler = mon_handler;
  14. sigfillset(&a.sa_mask);
  15. sigaction(SIGUSR1, &a, NULL);
  16. while(1){
  17. printf("-");
  18. fflush(stdout);
  19. kill(getpid(), SIGUSR1);
  20. sleep(1);
  21. }
  22. return 0;
  23. }


J'obtiens le résultat attendu donc si ça ne fonctionne pas ça vient certainement d'un autre morceau de ton code :) 
  • Commenter cette solution |
Score
0
òh
òi
|
Non bas c'est bon en faite faut rajouter une boucle infini dans le processu flis
merci de m'avoir accorder un peut de ton temps
bon week end
  • Commenter cette réponse |
Score
0
òh
òi
|
bonjour ,
:)  je te remercieA
Avec ce que tu as ecrit , j'ai repris tout depuis le debut est sa fonctionne

mais sa me refais le méme qand le met un fork()

dsl je sais pas utilisé les balises :( 

je te poste mon code :

  1. #include <math.h>
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<string.h>
  5. #include<ctype.h>
  6. #include<sys/types.h>
  7. #include<sys/stat.h>
  8. #include<fcntl.h>
  9. #include<unistd.h>
  10. #include <sys/stat.h>
  11. #include <sys/types.h>
  12. #include <sys/wait.h>
  13. #include <math.h>
  14.  
  15. void mon_handler(int sig) {
  16. printf("aie !!!!" );
  17. fflush(stdout);
  18. }
  19.  
  20. int main() {
  21.  
  22. int pv = 3 ;
  23. int ppid ;
  24.  
  25. struct sigaction a;
  26. a.sa_handler = mon_handler;
  27. sigfillset(&a.sa_mask);
  28.  
  29. sigaction(SIGUSR1, &a, NULL);
  30.  
  31. ppid = fork();
  32.  
  33. if(ppid == 0){/*ds le fils*/
  34. printf("fils >> fils de pid %d \n",getpid());
  35. sleep(3);
  36. }else{
  37. printf("pére >> pere de pid %d création d'un fils de pid %d \n" ,getpid(),ppid);
  38. sleep(2);
  39.  
  40. while(1){
  41. printf("pan !!!" );
  42. fflush(stdout);
  43. kill(ppid, SIGUSR1);
  44. sleep(1);
  45. }
  46.  
  47.  
  48.  
  49. }
  50.  
  51. return 0;
  52. }




  • Commenter cette réponse |
Score
0
òh
òi
|
Meilleure réponse sélectionnée par skywallker59.
  • Commenter cette réponse |
Score
0
òh
òi
|
merci
mais je voi pas comment le faire dans le handler
directement dans la fonction ?
  • Commenter cette réponse |
Score
0
òh
òi
|
Bonsoir,

Je suis pas certain d'avoir bien compris le problème, mais je pense que c'est juste que tu oublies de refaire un sigfillset dans le handler.
Si mes souvenirs sont bons, sigfillset te permet de récupérer seulement un seul signal, tu dois faire une sorte de réarmement dans le handler à chaque fois que tu reçois un signal :) 
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS