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

Langage Perl Discussion :

Interception de signaux


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Par défaut Interception de signaux
    Bonjour à tous.

    Cela fait déjà quelques temps que je suis confronté à un "problème" que je n'arrive pas à m'expliquer.

    Je vous explique l'idée. Je développe un démon, qui doit être disponible le plus souvent possible (100% du temps étant un idéal).

    Cependant, la configuration de ce démon peut être amenée à changer. Qu'à cela ne tienne, je catch un SIGUSR1 pour recharger la conf et continuer mon bonhomme de chemin.

    Sauf que j'ai remarqué que cette "astuce" ne fonctionnait qu'une seule fois.

    Pourtant, j'utilise un code de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #!/usr/bin/perl -w
     
    use strict;
     
    $SIG{'USR1'} = \&mafonction;
     
    sub mafonction() {
        $SIG{'USR1'} = \&mafonction;
        loadConf();
        [...]
    }
     
    [...]
    Est-il donc possible de "catcher" plusieurs fois un signal ?
    Si oui, comment ?

  2. #2
    Membre chevronné Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Par défaut
    Il y a un exemple tout à fait parlant dans perldoc perlipc. Pour initialiser le daemon, j'utilise généralement Proc:aemon, c'est plus simple.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Par défaut
    Merci pour cette réponse.
    Je teste ça dans la journée.

    Pour initialiser mon démon, j'utilise ce genre de fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    use POSIX 'setsid';
     
    sub daemonize {
        chdir '/' or die "Can't chdir to /: $!";
        open STDIN, '/dev/null' or die "Can't read /dev/null: $!";
        open STDOUT, '>/dev/null'
        or die "Can't write to /dev/null: $!";
        defined(my $pid = fork) or die "Can't fork: $!";
        exit if $pid;
        die "Can't start a new session: $!" if setsid == -1;
        open STDERR, '>&STDOUT' or die "Can't dup stdout: $!";
    }
    Ça fait à priori ce que j'ai besoin, et ce que fait Proc::Daemon d'après ce que j'ai lu dans la doc.

    Je ne marque pas encore à résolu en attendant de tester, mais cette solution devrait convenir d'après ce que je peux lire.

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

Discussions similaires

  1. Intercepter les signaux SIGINT(2) et autres
    Par dmganges dans le forum Langage
    Réponses: 2
    Dernier message: 10/03/2014, 12h58
  2. interception des signaux et prototypage
    Par eric1708 dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 25/09/2013, 15h55
  3. Réponses: 12
    Dernier message: 18/09/2012, 10h45
  4. Interception des signaux systèmes
    Par KiKiTiTi dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 28/10/2009, 15h17
  5. intercepter des signaux
    Par archadius dans le forum Langage
    Réponses: 1
    Dernier message: 24/10/2008, 12h31

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