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 :

Différencier signaux pere et fils ?


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 84
    Points : 69
    Points
    69
    Par défaut Différencier signaux pere et fils ?
    Bonjour,

    J'ai un programme qui lance des binaires présent dans le PATH (fork - exec*).
    Le programme en lui même handle quelques signaux, notamment le CTRL + C. Cependant, une fois que je suis dans un binaire executer, j'aimerai que les signaux CTRL + C ne soit pas capter par "mon programme".
    Autrement dit, est-ce possible de faire la différence entre un signal envoyer par le fils ou le père ?

    Exemple :
    ./my_prog
    my_prog> cat
    ^C
    (je ne veux pas que ce CTRL + C, soit capter par mon programme une fois que le binaire cat quitte).

    Merci.

  2. #2
    Membre averti

    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2012
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 313
    Points : 354
    Points
    354
    Par défaut
    Tu devrais t'intéresser à la fonction sigaction(), qui te permet d'ignorer certains signaux, pas tous (heureusement).

    Voici un exemple qui permet d'ignorer CTRL-C:

    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
    #ifdef LINUX
    int getch() 
    {
      struct termios oldt, newt;
       struct sigaction Detournement;
     
       Detournement.sa_handler=SIG_IGN;
       // On ne peut pas interrompre le getch...
       sigaction(SIGINT,&Detournement,NULL);
     
        int ch;
        tcgetattr(STDIN_FILENO, &oldt);
        newt = oldt;
          newt.c_lflag &= ~(ICANON | ECHO ); // permet de ne pas devoir appuyer sur entrée... ne fait pas l'écho du caractère entré
     
        tcsetattr(STDIN_FILENO, TCSANOW, &newt);
        ch = getchar();
        tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
     
    // rétablir le comportement par défaut...
     
          Detournement.sa_handler=SIG_DFL;
          Detournement.sa_flags=0;
          sigaction(SIGINT,&Detournement,NULL);
     
        return ch;
    }
    #endif

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 687
    Points : 30 980
    Points
    30 980
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par sbill Voir le message
    j'aimerai que les signaux CTRL + C ne soit pas capter par "mon programme".
    Autrement dit, est-ce possible de faire la différence entre un signal envoyer par le fils ou le père ?
    Bonjour

    Le pb, c'est que ctrl-c n'est ni envoyé par le père ni par le fils, mais par le clavier !!!

    Donc si tu veux inhiber le ctrl-c seulement dans le père, alors tu l'inhibe après le fork dans la branche "père". Et si tu veux l'inhiber seulement dans le fils, alors tu l'inhibe après le fork dans la branche "fils" avant le "exec"...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. Gestion de signaux, pères et fils
    Par Darkeagle33 dans le forum C
    Réponses: 12
    Dernier message: 15/06/2007, 15h00
  2. [Devinette] Entre Peres et Fils (Facile)
    Par parp1 dans le forum La taverne du Club : Humour et divers
    Réponses: 6
    Dernier message: 10/05/2007, 16h00
  3. liaison Pere et fils
    Par Renardo dans le forum Modélisation
    Réponses: 2
    Dernier message: 10/04/2007, 20h25
  4. [Débutant] père, mère, fils, comment faire les jointures ?
    Par santana2006 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 01/09/2006, 16h21
  5. [POO] Fork : Pere et Fils et objets ???
    Par haffouff dans le forum Langage
    Réponses: 8
    Dernier message: 03/05/2006, 14h58

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