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

Linux Discussion :

masquer un signal


Sujet :

Linux

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 65
    Points : 35
    Points
    35
    Par défaut masquer un signal
    slt tt le monde
    s'il vous plait , pouvez vous me montrer comment masquer un signal et le démasquer , mais pas justement l'ignorer ,car je veux quand je masque un signal bien précis (disant sigint ou sigkill), je le bloque momentanément jusqu'a ce que je le démasque et à ce moment là,il est repris sans que je le renvoie a nouveau .
    merci cordialement

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    déjà SIGKILL est impossible à masquer..

  3. #3
    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,

    Citation Envoyé par laracroft87 Voir le message
    je le bloque momentanément jusqu'a ce que je le démasque et à ce moment là,il est repris sans que je le renvoie a nouveau .
    Ce que tu souhaites faire n'est pas possible. Sur reception d'un signal, tu peux faire une action, mais cela "consomme" le signal.

    Masquer un signal est un abus de langage qui veut simplement dire que lorsque tu recois ledit signal, ton action est de ne rien faire.

    Dans ton cas, la solution est la suivante :
    Sur reception du signal que tu souhaites interrompre, tu positionnes un flag. Tu fais ensuite tous les traitements que tu souhaites faire, puis lorsque tu as fini, tu re-emets un autre signal qui lui aura une autre action sur le programme.

    Dis-nous ce que tu souhaites faire, ca sera plus facile de t'aider.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 65
    Points : 35
    Points
    35
    Par défaut
    moi ce que je cherche c'est que lorsque je masque par exemple mon signal SIGINT dès que je tape CTRL+C il rien qui va se passer au tant que le signal est masqué , mais lorsque je le démasque il va reprendre le traitement du signal SIGINT sans que le refrappe pour une autre fois
    merci bcp à vous

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 408
    Points : 23 803
    Points
    23 803
    Par défaut
    Bonsoir,

    Citation Envoyé par gangsoleil Voir le message
    Ce que tu souhaites faire n'est pas possible. Sur reception d'un signal, tu peux faire une action, mais cela "consomme" le signal.

    Masquer un signal est un abus de langage qui veut simplement dire que lorsque tu recois ledit signal, ton action est de ne rien faire.
    Je regrette mais ce n'est pas vrai. Ce qu'elle veut faire, c'est le boulot de sigprocmask() (et même anciennement sigblock() sur BSD).

    Citation Envoyé par laracroft87 Voir le message
    moi ce que je cherche c'est que lorsque je masque par exemple mon signal SIGINT dès que je tape CTRL+C il rien qui va se passer au tant que le signal est masqué , mais lorsque je le démasque il va reprendre le traitement du signal SIGINT sans que le refrappe pour une autre fois.
    Le code suivant se comporte comme tu l'entends :

    Code C : 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
    /*
     * blocksignal.c -  Blocage de signal avec sigprocmask()
     *
     *                  Jeudi 15 avril 2010 01h35
     *                  http://www.developpez.net/forums/d907240/general-developpement/programmation-linux/masquer-signal/
     */
     
    #define _XOPEN_SOURCE 600 
     
    #include <sys/types.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <stdio.h>
    #include <signal.h>
     
    void handler (int x)
    {
        x=x; /* Utilisation du paramètre pour éviter les warnings */
     
        printf ("SIGINT reçu. On sort.\n");
        exit (1);
    }
     
    int main (void)
    {
        sigset_t ss;
     
        printf ("Bonjour. Mon PID est %d.\n",(int)getpid());
     
        signal (SIGINT,handler);
     
        sigemptyset (&ss);
        sigaddset   (&ss,SIGINT);
     
        sigprocmask (SIG_BLOCK,&ss,NULL);
        printf ("SIGINT bloqué pour 10 secondes.\n");
        sleep (10);
     
        sigprocmask (SIG_UNBLOCK,&ss,NULL);
        printf ("SIGINT débloqué. Attente de 10 nouvelles secondes.\n");
        sleep (10);
     
        printf ("Sortie normale.\n");
     
        return 0;
    }

    Est-ce un devoir scolaire ?

  6. #6
    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,

    Je ne connaissais pas sigprocmask(). Merci pour l'information.

Discussions similaires

  1. [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, 09h57
  2. [VB6] masquer la barre de titre d'une form
    Par tiboleo dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 09/12/2002, 18h54
  3. Afficher/Masquer un bouton comme IE 6
    Par benj63 dans le forum C++Builder
    Réponses: 3
    Dernier message: 29/07/2002, 14h12
  4. Masquer le curseur en mode MS-DOS
    Par Alex120 dans le forum C
    Réponses: 2
    Dernier message: 10/07/2002, 10h30
  5. Comment masquer le curseur de la souris ?
    Par benj63 dans le forum C++Builder
    Réponses: 4
    Dernier message: 26/06/2002, 19h54

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