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

Shell et commandes GNU Discussion :

trap et signaux


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2012
    Messages : 8
    Par défaut trap et signaux
    Bonjour,

    J'ai besoin de gérer les signaux sur un script pour que celui-ci kill d'autres signaux avant de se terminer lui même.
    J'ai donc testé avec un script tout simple qui va écrire une ligne dans un log, killer un autre processus et enfin terminer le script en cours, le tout lorsqu'il capte un signal.
    Voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/bin/bash
    Handle_Exit(){        
           echo 'detecte'>>my_log
           pkill -KILL  mon_proc.sh
           exit 0
    }
    trap "Handle_Exit" SIGTERM SIGINT EXIT
     
     
     
    sleep 60

    J'arrive à gérer le ctrl+c que je fais moi même au clavier, écriture dans le log et kill de l'autre processus, donc mon handler marche, du moins en partie.
    Lorsque je retire le trap et que je lance un kill -15 mon processus se termine sans problème mais lorsque je garde mon trap, le kill -15 ne fait rien, pas de terminaison du processus et pas d'écriture dans mon fichier de log non plus. Bref le SIGTERM est bien capté, il n'a aucun effet puisque mon processus ne se termine pas mais il n'est pas traité par ma fonction handle_exit.

    J'ai fais beaucoup de test et je n'arrive pas a comprendre pourquoi le ctrl+c passe et les autres signaux non.

    J'espère que quelqu'un sera capable de m'expliquer où se trouve mon erreur.

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2012
    Messages : 8
    Par défaut
    Bon j'ai compris la cause de ce problème.
    Le sigterm est bien capté et traité, seulement il faut attendre la fin du sleep...
    Cependant j'ai besoin que mon processus sorte du sleep dès de la réception de mon signal...
    Voici en gros le code qui resemble à ce que je veux vraiment faire:

    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
    #!/bin/bash
    Handle_Exit_Safely(){
            echo 'la'        
            echo 'detecte'>>my_log
           pkill -KILL  test.sh
           pkill -KILL $proc_second
           pkill -KILL  $proc_third
           exit 0
    }
    trap "Handle_Exit_Safely" SIGTERM SIGINT EXIT
     
     
    ./test.sh
    wait
     
    echo -e $mail_body_error_run | mailx -s $mail_subject_error_run$application_name  -r $application_name $application_administrator

    Mon processus lance le premier, attend la terminaison du second processus pour envoyer un mail.
    Cependant je veux pouvoir envoyer un signal a mon processus pour qu'il ferme le processus qu'il attend et deux autres processus pour ensuite se fermer lui même.

    Ce code fonctionne avec un ctrl+c, le processus sort du wait et kill les autres processus. Pourtant si mes souvenir sont exacte ctrl-c = SIGINT, cependant lorsque je fais un kill -2 ou kill -SIGINT sur le processus cela ne marche pas, il reste dans son wait et ne kill aucun processus.

    Sur ce coup la je ne vois pas pourquoi il réagit comme je le veux avec un ctrl-c qui n'est autre qu'un SIGINT alors qu'il ne réagit pas lorsqu'on lui envoi un SIGINT par un kill

Discussions similaires

  1. [Amstrad] Signaux à gérer port E/S pour lire ROM
    Par Masterglob dans le forum Autres architectures
    Réponses: 7
    Dernier message: 12/01/2005, 12h03
  2. trap snmp
    Par rocco4 dans le forum Développement
    Réponses: 3
    Dernier message: 13/09/2004, 21h07
  3. [SNMP] différences entre traps et notifications?
    Par fadoua dans le forum Développement
    Réponses: 2
    Dernier message: 06/07/2004, 11h57
  4. SNMP: comment on voit les messages trap ???
    Par talakela dans le forum Développement
    Réponses: 2
    Dernier message: 03/06/2003, 17h39
  5. Qu'est ce qu'un trap ?
    Par Estoril dans le forum Développement
    Réponses: 6
    Dernier message: 27/04/2003, 14h42

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