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

Bibliothèques, systèmes et outils C Discussion :

Le signal SIGUSR1


Sujet :

Bibliothèques, systèmes et outils C

  1. #1
    Membre régulier
    Homme Profil pro
    élève ingenieur
    Inscrit en
    Août 2015
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : élève ingenieur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2015
    Messages : 69
    Points : 72
    Points
    72
    Par défaut Le signal SIGUSR1
    Salut à tous .

    Je voudrai savoir s'il vous plait comment Ecrire un programme C qui crée un processus fils qui effectue une boucle infinie.
    Le processus père attends 5 secondes puis envoi à son fils un signal SIGUSR1 avec la fonction kill.

    Le fils doit intercepter le signal et afficher un message indiquant la date ou l'heure.

    Merci d'avance .

  2. #2
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 038
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 038
    Points : 8 405
    Points
    8 405
    Par défaut
    salut,

    Citation Envoyé par enadams Voir le message
    Je voudrai savoir s'il vous plait comment Ecrire un programme C qui crée un processus fils qui effectue une boucle infinie.
    Le processus père attends 5 secondes puis envoi à son fils un signal SIGUSR1 avec la fonction kill.

    Le fils doit intercepter le signal et afficher un message indiquant la date ou l'heure.
    ben c'est exactement comme tu l'as décrit en fait, les fonctions à utiliser sont fork(2), kill(2) et signal(2)

    où est-ce que tu bloques exactement, tu peux montrer ton code ?

  3. #3
    Membre régulier
    Homme Profil pro
    élève ingenieur
    Inscrit en
    Août 2015
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : élève ingenieur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2015
    Messages : 69
    Points : 72
    Points
    72
    Par défaut
    Bonjour .
    Merci pour votre réponse .
    J'ai été bloqué au niveau signal.comment le pére envoi le signal et le fils l'intercepte.

    Voici mon code
    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
    #include <stdlib.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <sys/wait.h>
    #include <signal.h>
     
    int main(int argc,char* argv[])
    {
     int fils;
     fils = fork();
     if(fils==0)
    	 {
    		int i;i=2;
    		while(i>0) 
    			sleep(i);	
     
    		exit(time);
     
    	 }
     else 
    	{
    	 	sleep(5);
    		signal(SIGUSR1,kill);
     
    	}
     
     
    }

  4. #4
    Membre chevronné
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    855
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 855
    Points : 2 176
    Points
    2 176
    Par défaut
    La fonction signal permet de définir un callback, donc elle doit être appelée au début du programme si possible (ou du fork). Exemple rapide :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // processus fils
    signal(SIGUSR1, fonction_a_appeler);
     
    int fonction_a_appeler() {
        // écrire ton message ici
    }
    Je ne vois aucun appel à la fonction kill dans ton code (kill dans signal ne sert certainement pas à ça).

  5. #5
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 038
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 038
    Points : 8 405
    Points
    8 405
    Par défaut
    ce qu'il faut comprendre c'est qu'en faisant fork() on se retrouve avec 2 processus qui ont exécutent la même chose, ils sont identiques, la seule chose qui les distingue c'est leur pid

    en gros la structure de ton programme doit ressembler à quelque chose comme ça :
    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
    void fonction_a_appeler() {
       /* on formate la date ou l'heure dans un char[] (strftime) */
       /* on affiche */
       /* on termine (exit) le processus fils */
    }
     
    int main (int argc, char **argv) {
       pid = fork();
       if (pid > 0) {
          /* "Le processus père attends 5 secondes" */
          /* "puis envoi à son fils un signal SIGUSR1 avec la fonction kill." */
       } else {
          /* "Le fils doit intercepter le signal" */
          /* "un processus fils qui effectue une boucle infinie." */
       }
       return 0;
    }
    note: pour info une boucle infinie c'est while(1);

  6. #6
    Membre régulier
    Homme Profil pro
    élève ingenieur
    Inscrit en
    Août 2015
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : élève ingenieur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2015
    Messages : 69
    Points : 72
    Points
    72
    Par défaut
    Merci pour votre réponse .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. SIGUSR1 non définie dans signal.h (sous MinGW 3.4)
    Par TheDrev dans le forum Débuter
    Réponses: 4
    Dernier message: 20/05/2008, 14h22
  2. Processus : Signal SIGUSR1
    Par Denti-fritz dans le forum POSIX
    Réponses: 1
    Dernier message: 17/05/2007, 14h21
  3. [VB6] [MDI] Signaler la fermeture d'une fille à la mère
    Par cpri1shoot dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 13/04/2004, 08h57
  4. Dxdiag me signale que j'ai 510M de ram
    Par Goetz dans le forum DirectX
    Réponses: 1
    Dernier message: 29/09/2003, 14h33
  5. Interception du signal SIGINT
    Par macleod dans le forum MFC
    Réponses: 2
    Dernier message: 01/07/2003, 18h39

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