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 :

Signaux et handler!


Sujet :

Linux

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut [Résolu] Signaux et handler
    Bonjour!

    J'aurai souhaité quelques infos pour répondre aux questions suivantes: Merci à ceux qui peuvent m'aider!

    -> Est-ce qu'un signal peut interrompre son propre handler?
    -> Est-ce qu'un signal SIGINT peut interrompre un signal SIGOUT?
    -> Est-ce que chaque arrivée de signal provoque systématiquement l'exécution du handler associé? (je dis ça parce je crois qu'il y a un truc genre SI_ING qui permet de l'ignorer mais je sais plus trop!!)
    -> Si l'appel system sleep est interrompu par un signal, est-ce que le systeme le relance?
    -> processus dont le père est tué est adopté par init, mais si le père avait un père, est-ce que processus "petit-fils" est adopté par le grand père ou par le père?

  2. #2
    Membre confirmé Avatar de Tchetch
    Inscrit en
    Mars 2002
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 401
    Points : 477
    Points
    477
    Par défaut
    Citation Envoyé par siviuze
    -> Est-ce qu'un signal peut interrompre son propre handler?
    -> Est-ce qu'un signal SIGINT peut interrompre un signal SIGOUT?
    -> Est-ce que chaque arrivée de signal provoque systématiquement l'exécution du handler associé? (je dis ça parce je crois qu'il y a un truc genre SI_ING qui permet de l'ignorer mais je sais plus trop!!)
    Étant donné que c'est ton programme (donc toi) qui décide de ce que tu vas faire avec les signaux, c'est à toi de décider ce que tu veux en faire. Il y a que SIGKILL et SIGSTOP qui ne peuvent pas être bloqués, attrapés ou ignorés.
    Pour le reste les manuels contiennent toutes les informations que tu cherches (man signal, pour commencer).


    Citation Envoyé par siviuze
    -> Si l'appel system sleep est interrompu par un signal, est-ce que le systeme le relance?
    Le système va continuer ou le programme en était avant le signal, donc finir le sleep.

    Citation Envoyé par siviuze
    -> processus dont le père est tué est adopté par init, mais si le père avait un père, est-ce que processus "petit-fils" est adopté par le grand père ou par le père?
    Par le père. Mais j'ai pas testé, mais en théorie par le père. Testes-le !

  3. #3
    Membre habitué Avatar de mensoif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 248
    Points : 129
    Points
    129
    Par défaut
    man signal, pour commencer
    Et pour "continuer" je te conseille man 7 signal qui est également une très bonne source d'information sur les signaux.

  4. #4
    Membre confirmé

    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2005
    Messages : 464
    Points : 646
    Points
    646
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Envoyé par siviuze
    -> Si l'appel system sleep est interrompu par un signal, est-ce que le systeme le relance?
    Le système va continuer ou le programme en était avant le signal, donc finir le sleep.
    Non le systeme ne le relance pas forcement, tout depend comment tu as installé le gestionnaire du signal.

    C'est d'ailleurs par ce mécanisme que l'on sort de fonctions bloquantes (ex : select avec timeout, le processus recoit le signal SIGALRM).

  5. #5
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Citation Envoyé par siviuze Voir le message
    -> Est-ce qu'un signal peut interrompre son propre handler?
    Par défaut, si tu as enregistré ton signal handler via sigaction(), alors le signal qui a déclanché l'appel du handler est masqué pendant l'appel du handler. Donc, tu ne peux pas être à nouveau interrompu par le même signal. Par contre, tu peux l'être par un autre signal qui utiliserait le même handler. Toutefois tu peux, au moment de l'enregistrement du handler avec sigaction(), spécifier les signaux qui doivent être masqués pendant que le handler est appelé (champs sa_mask de la structure sigaction). Il est également possible de permettre à ton handler d'être à nouveau interrompu en cas de nouvelle arrivée du même signal (option SA_NODEFER dans sa_flags). Donc tu vois, tout est possible, et c'est toi qui décide. Il suffit de lire le man de sigaction.
    Citation Envoyé par siviuze Voir le message
    -> Est-ce qu'un signal SIGINT peut interrompre un signal SIGOUT?
    Jamais entendu parler de sigout.
    Citation Envoyé par siviuze Voir le message
    -> Est-ce que chaque arrivée de signal provoque systématiquement l'exécution du handler associé? (je dis ça parce je crois qu'il y a un truc genre SI_ING qui permet de l'ignorer mais je sais plus trop!!)
    Oui, à part si le signal est masqué (par exemple si tu est déjà dans le handler, que le même signal arrive à nouveau et que tu n'a pas spécifié SA_NODEFER lors de l'enregistrement du handler). Dans le cas dont tu parles (signal ignoré), il n'y a pas de handler enregistré, donc la question n'a pas lieu d'être.
    Citation Envoyé par siviuze Voir le message
    --> Si l'appel system sleep est interrompu par un signal, est-ce que le systeme le relance?
    Non. Dans ce cas la fonction sleep() retourne, et la valeur de retour est le nombre de seconde qu'il te restait à dormir.
    Citation Envoyé par siviuze Voir le message
    -> processus dont le père est tué est adopté par init, mais si le père avait un père, est-ce que processus "petit-fils" est adopté par le grand père ou par le père?
    D'abort, si le père est tué, le fils reçoit un SIGHUP dont l'action par défaut est de terminer le processus. Donc, à part si tu as installé ton propre handler pour SIGHUP, ton fils va terminer en même temps que le père. Ensuite, si tu fais subsiter ton fils (c'est à dire si tu intercèptes SIGHUP), alors le fils est directement attaché au process "init" (pid 1).

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Je répond à ce post avec (un peu ?) de retard.

    Je tenais à vous remercier pour vos réponses qui m'ont beaucoup aidé (elles m'ont tellement aidé que j'en ai oublié de clôturer correctement ce post ).

    Encore merci et désolé pour le décalage dans le temps

Discussions similaires

  1. Passer des parametres aux handler de signaux
    Par TheDrev dans le forum POSIX
    Réponses: 84
    Dernier message: 23/10/2008, 11h01
  2. [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
  3. [C#] Gérer les signaux genre ctrl+c?
    Par BleudeBromothymol dans le forum Windows Forms
    Réponses: 8
    Dernier message: 17/11/2004, 15h32
  4. [C#] suppression handler sur ImageButton
    Par jld33 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 07/01/2004, 09h50

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