IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Signal #2 défini par l'usager ? pourquoi ? c'est quoi ?


Sujet :

C

  1. #1
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut Signal #2 défini par l'usager ? pourquoi ? c'est quoi ?
    Bonsoir,

    J'ai deux processus, un qui fait un kill :
    et qui envoie donc le signal SIGUSR2 a l'autre ou je fais une interception du signal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    signal(SIGUSR2, traitant);
    J'obtiens alors comme message :
    Signal #2 défini par l'usager


    Et tout s'arrête ? Comment ca se fait ?
    Dans d'autres programmes qu'on avait eu en TP ca ne le faisait pas... pourquoi ?
    Quelqu'un saurait d'ou ca vient svp ?

    Merci
    Bonne soirée et bonne année

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 581
    Points
    41 581
    Par défaut
    J'ai déjà vu des problèmes avec les SIGUSRx. Comme s'ils ne pouvaient pas être intercepés, ou s'ils ne pouvaient pas passer d'un processus à l'autre...

  3. #3
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut
    Et vous ne savez pas ca pourrait venir de quoi ? du code source ou autre chose indépendant ?

  4. #4
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut

  5. #5
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut
    J'ai déja cherché sur Google, sans succès... c'est pour cela que j'ai posé ma question sur le forum...

    Merci
    ++

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 581
    Points
    41 581
    Par défaut
    L'image est un lien...

  7. #7
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut
    Je sais et j'ai cliké mais ca amene juste sur la page de recherche de google...

  8. #8
    Membre habitué Avatar de Ksempac
    Inscrit en
    Février 2007
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 165
    Points : 185
    Points
    185
    Par défaut
    Citation Envoyé par italiasky Voir le message
    Je sais et j'ai cliké mais ca amene juste sur la page de recherche de google...
    ...où le premier résultat contient la réponse que tu cherches.

  9. #9
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Ksempac Voir le message
    ...où le premier résultat contient la réponse que tu cherches.
    Et pas que le premier. Une bonne partie des autres resultats font aussi allusion au probleme.

  10. #10
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut
    J'ai lu et même si je ne suis pas bilingue je pense avoir compris un minimum ce qui se disait sur les pages anglaises mais sincèrement pour moi ca ne résoud pas mon problème...

    Le 1er lien parle d'une version du noyau de Linux et de thread mais j'ai la dernière version du noyau et j'utilise pas les threads.

    Après les autres, ils parlent plus des signaux en général mais pas du problème que j'ai...

    Enfin merci quand même

    ++

  11. #11
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 129
    Points
    28 129
    Par défaut
    Bonjour,

    Peux-tu poster le code avec lequel tu as un problème ?

  12. #12
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut
    Bien justement je ne sais pas ou est le problème... lol

    Je fais juste un kill normal pour envoyé un signal a un processus
    Et je fais un signal pour le récupérer dans l'autre processus...

  13. #13
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par italiasky Voir le message
    Bien justement je ne sais pas ou est le problème...
    On te demande de poster le code source qui présente le défaut.

  14. #14
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut
    J'avais compris...

    Mais je vous dis que je ne sais pas quel code provoque l'erreur...

    J'intercepte le signal comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    signal(SIGUSR1, (sig_t) traitantSignalChefProdCommande);
    et l'envoie comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    kill(pid_cuisiniers[j], SIGUSR1);
    C'est tout, je ne vois pas ce que je peux mettre de plus, c'est un projet avec plusieurs fichiers, je ne vais pas tous les copier coller ca va être trop long...

    Je pensais que cette erreur pouvait provenir a cause d'un conflit avec autre chose ?

  15. #15
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par italiasky Voir le message
    C'est tout, je ne vois pas ce que je peux mettre de plus, c'est un projet avec plusieurs fichiers, je ne vais pas tous les copier coller ca va être trop long...
    Alors il faut le réduire au minimum compilable et exécutable qui génère le problème (méthode de mise au point bien connue).

  16. #16
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut
    Bonjour,

    Après avoir fait moult tests, je pense (j'espère) avoir trouvé l'origine du problème...

    Est-ce que quelqu'un connait les options -D_XOPEN_SOURCE -D_SVID_SOURCE pour le compilateur GCC ?

    Je les ai rajouté parce que lorsque je compilais, j'obtenais cette erreur :
    "/usr/include/sys/ipc.h:25:3: attention : #warning "Files using this header must be compiled with _SVID_SOURCE or _XOPEN_SOURCE""

    J'ai donc rajouté les options pour pouvoir compilé et c'est justement quand j'ai ces options que j'ai le problème avec mes signaux :
    "Signal #1 défini par l'usager "

    Quelqu'un en a déjà entendu parler ?

    Je vais continuer à tester mais j'ai vraiment l'impression que ca vient de là...

    Merci
    ++

  17. #17
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    Par défaut
    Re,

    Bon je n'ai pas résolu mon problème en fait lol
    Sans les options, j'ai pu le message qui s'affiche mais les signaux ne passent pu quand même...

    J'ai testé en envoyant manuellement les signaux avec kill dans un terminal au processus lancé !

    J'arrive à envoyer une fois le signal SIGUSR1 et une fois le signal SIGUSR2.

    Si je recommence à envoyer un des deux signaux, ils ne passent plus on dirait...
    Et donc avec les options du compilateur dont je parlais avant, c'est à ce moment que j'ai Signal #1 défini par l'usager et sans les options, il ne se passe rien mais on voit bien que le signal ne passe pas ou n'est pas intercepté en tout cas !

    Voici le code de ce qui est censé réceptionner les signaux :
    Pour les envoyer, je fais un simple kill -s dans un terminal.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
     
    #include <stdio.h>  
    #include <stdlib.h>
    #include <unistd.h>
    #include <signal.h>
    #include <time.h>
    #include <sys/wait.h>
    #include <sys/ipc.h>
    #include <sys/shm.h>
    #include <sys/msg.h>
    #include <sys/sem.h>
    #include <sys/types.h>
    #include "types.h"
    #include "lib.h"
    #include "cle.h"
     
    /* Mode de production de la nourriture a la commande */
    void productionCommande(int shmid, int msgid)
    {
     
     
    	int* nb_nourritures = (int*) shmat(shmid, 0, 0);
     
     
    	while(1)
    	{
    		printf("je produis 1 nourriture a la commande\n");
     
    		/* Les cuisiniers regardent le compteur */
    		if((*nb_nourritures) != 0)
    		{
    			nourriture_t nourriture;
    			time(&nourriture.date_creation);
     
    			sleep(TEMPS_PRODUCTION_NOURRITURE);
     
    			if(msgsnd(msgid, &nourriture, sizeof(nourriture_t), 0) == -1)
    				erreurFin("Erreur msgsnd : ", 1);
     
    			(*nb_nourritures)--;
    		}
    		else
    		{
    			printf("Jattendssss\n");
    			sleep(5);
    		}
    	}
    }
     
    /* Mode de production de la nourriture en continue */
    void productionContinue(int msgid)
    {
    	while(1)
    	{
    	printf("je produis 1 nourriture en continue\n");
     
    	nourriture_t nourriture;
    	time(&nourriture.date_creation);
     
    	sleep(TEMPS_PRODUCTION_NOURRITURE);
     
    	if(msgsnd(msgid, &nourriture, sizeof(nourriture_t), 0) == -1)
    		erreurFin("Erreur msgsnd : ", 1);
    	}
     
    }
     
    /* Interception du signal correspondant au mode de production a la commande */
    void traitantSignalChefProdCommande(int num)
    {
    	printf("°°° Nous, les cuisiniers, devons produire a la commande °°° \n");
     
    	/* Initilisation des outils de communications et recuperation des identifiants */
    	int idCommunications[7];
    	initCommunications(0,
    		  	   0,
    		  	   0,
    		   	   0,
    		   	   CLE_MEM_NOURRITURES_A_PRODUIRE,
    		   	   CLE_FILE_NOURRITURES,
    			   0,
    		   	   (int*) &idCommunications);
     
    	productionCommande(idCommunications[4], idCommunications[5]);	
    }
     
    /* Interception du signal correspondant au mode de production en continue */
    void traitantSignalChefProdContinue(int num)
    {
    	printf("°°° Nous, les cuisiniers, devons produire en continu °°° \n");
     
    	/* Initilisation des outils de communications et recuperation des identifiants */
    	int idCommunications[7];
    	initCommunications(0,
    		  	   0,
    		  	   0,
    		   	   0,
    		   	   0,
    		   	   CLE_FILE_NOURRITURES,
    			   0,
    		   	   (int*) &idCommunications);
     
    	productionContinue(idCommunications[5]);
    }
     
     
     
    int main(int argc, char** argv)
    {
    	int chef = atoi(argv[3]);
     
    	if(argc != 4)
    		erreurFin("Appel de cuisinier avec 3 arguments !", 1);
     
    	if(chef == TRUE)
    	{
    		signal(SIGUSR1, traitantSignalChefProdCommande);
    		signal(SIGUSR2, traitantSignalChefProdContinue);
    		printf("Je suis le chef des cuisiniers ! ");
    	}
    	/*else
    	{
    		printf("okkkkkkkkkkk");
    		signal(SIGUSR1, traitantSignalProdCommande);
    		signal(SIGUSR2, traitantSignalProdContinue);
    	}*/
     
    	printf("Je suis un cuisinier, pid : %d\n", (int) getpid());
     
    	/* Initilisation des outils de communications et recuperation des identifiants */
    	int idCommunications[7];
    	initCommunications(0,
    		  	   0,
    		  	   0,
    		   	   0,
    		   	   CLE_MEM_NOURRITURES_A_PRODUIRE,
    		   	   CLE_FILE_NOURRITURES,
    			   0,
    		   	   (int*) &idCommunications);
     
    	productionCommande(idCommunications[4], idCommunications[5]);
    }
    Merci
    ++

  18. #18
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 129
    Points
    28 129
    Par défaut
    Bonjour,

    Le handler de signal se doit d'être le plus court possible. Idéalement, il doit changer l'état d'une variable, pas plus. Dans aucun cas il ne doit appeler d'autres fonctions, faire de l'affichage, .......

    Je pense qu'il serait bon que tu te tournes vers un cours sur les signaux avant de continuer plus avant.

Discussions similaires

  1. [Débutant] Signal définie par parties !
    Par prologO dans le forum Signal
    Réponses: 4
    Dernier message: 09/01/2010, 09h19
  2. SQL Server / Fonction définie par l'utilisateur
    Par borgfabr dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/03/2005, 15h14
  3. Voir quelques enregistrements définis par leur Index
    Par Lucien dans le forum Bases de données
    Réponses: 4
    Dernier message: 06/12/2004, 08h42
  4. Modifier un type défini par l'utilisateur
    Par soazig dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/08/2004, 12h47
  5. Fonctions définies par l'utilisateur
    Par DiGueDao dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/06/2003, 11h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo