intercepter SIGKILL possible ?(les signaux )
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

intercepter SIGKILL possible ?(les signaux )



  1. #1
    invitee2f3230c

    intercepter SIGKILL possible ?(les signaux )


    ------

    Salut
    D'aprés ce que j'ai compris sur le signaux, qu'on peut pas empêcher le Ctrl C c'est à dire le fait de tuer un processus.
    et bon voilà un exercice qui contre dit cette hypothèse.
    il s'agit d'un programme qui affiche continuellement BONJOUR.Ce programme doit intercepter le signal Ctrl C et n’accepte de le tuer que si l'utilisateur entre le mot de passe correct.

    signal Ctrl C=> SIGKILL => signal n°9

    voici mon essai qui surement faux, je convaincue par mon hypothèse:
    Code:
    #include<stdio.h>
    #include<signal.h>
    #include<unistd.h>
    void sighandler(int signum)
    {
         char password[5];
         printf("Mot de passe:")
         scanf("%s",mp);
         if(mp=="xyz")//si le mot de passe est correcte
            kill((int)getpid,9);
    }
    int main()
    {
      signal(SIGKILL,&sighandler);//  si le signal n°9  arrive donc executer sighandler
    
      while(1)
        {
           printf("Bonjour \n")
           sleep(10);
         }
    return 0;
    }
    alors que donne ce prgramme:
    en l'executant, il m'affiche même pas "Bonjour" 8O

    quelque peut m'aider à débugger cette situation

    merci à l'avance

    -----

  2. #2
    polo974

    Re : intercepter SIGKILL possible ?(les signaux )

    man 7 signal donne:
    The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored.

    mais heuresement ctrl-c envoie SIGINT et pas SIGKILL (ce dernier étant très radical...).
    Jusqu'ici tout va bien...

  3. #3
    bzh_nicolas

    Re : intercepter SIGKILL possible ?(les signaux )

    Code:
    if(mp=="xyz")
    Cette condition ne marchera jamais comme tu l'entends de toute façon. La tu compares les adresses des pointeurs sur mp et sur ta chaine "xyz" (chaine temporaire, dont la durée de vie est limité à cette instruction). La comparaison te retournera toujours faux.

  4. #4
    invitee2f3230c

    Re : intercepter SIGKILL possible ?(les signaux )

    merci pour vos réponse

    en tenant compte de ce que vous avez dit:
    Code:
    #include<stdio.h>
    #include<signal.h>
    #include<unistd.h>
    #include<string.h>
    void sighandler(int signum)
    {
         char password[5];
         char pw[]="xyz";
         printf("Mot de passe:")
         scanf("%s",password);
         if(strcmp(password,pw)==0)//si le mot de passe est correcte
            kill((int)getpid,9);
    }
    int main()
    {
      signal(2,&sighandler);//  si le signal n°2  arrive donc executer sighandler
    
      while(1)
        {
           printf("Bonjour \n")
           sleep(10);
         }
    return 0;
    }
    malgré tous ces changement, il m'affiche même pas bonjour

  5. A voir en vidéo sur Futura
  6. #5
    Jack
    Modérateur

    Re : intercepter SIGKILL possible ?(les signaux )

    malgré tous ces changement, il m'affiche même pas bonjour
    1ère raison: la compilation a échoué car il manque des ; à la fin des printf
    2ème raison: l'appel signal a échoué. Tu dois tester la valeur renvoyée par cet appel avant de continuer
    3ème raison: les paramètres de signal ne sont pas corrects. Tu passes &sighandler ou lieu de sighandler

    De plus, pour des raisons de portabilité, utilise plutôt les noms des signaux, car leurs valeurs changent d'un système à l'autre. Ils sont souvent définis dans signal.h

    A+

  7. #6
    ProgVal

    Re : intercepter SIGKILL possible ?(les signaux )

    Bonjour,

    Aucun programme ne devrait demander un mot de passe à la réception d'un
    SIGTERM, c'est la preuve d'un défaut de conception majeur.
    Demander un mot de passe après un SIGTERM, c'est comme mettre un digicode sur
    une issue de secours.

    Si un utilisateur a la possibilité d'envoyer un SIGTERM au processus, c'est
    soit qu'il est le superutilisateur, et donc qu'on ne doit rien lui refuser,
    soit qu'il est l'utilisateur qui a lancé le processus, et donc qu'il devrait
    pouvoir l'arrêter quand bon lui semble.
    Je peux comprendre, surtout si tu n'es pas familier avec les systèmes dont les
    utilisateurs sont clairement distincts (c'est la dire la famille des Unix),
    que tu n'ai pas envisagé de lancer ce programme en tant qu'un autre
    utilisateur, ce qui empêcherait l'utilisateur courant de killer.
    Je n'y a jamais touché (puisque je ne programme pas (encore) en C), mais il
    semblerait que 'suexec' soit ce qu'il te faut.

    Cordialement,
    ProgVal

  8. #7
    whoami

    Re : intercepter SIGKILL possible ?(les signaux )

    Bonjour,

    +1 ProgVal

  9. #8
    polo974

    Re : intercepter SIGKILL possible ?(les signaux )

    Code:
         char password[5];
    ...
         scanf("%s",password);
    c'est vraiment chercher à exploser la pile...
    peut- être un fgets suivi d'un sscanf...
    Jusqu'ici tout va bien...

  10. #9
    bzh_nicolas

    Re : intercepter SIGKILL possible ?(les signaux )

    Citation Envoyé par polo974 Voir le message
    c'est vraiment chercher à exploser la pile...
    C'est un autre moyen efficace pour fermer un programme.

  11. #10
    Jack
    Modérateur

    Re : intercepter SIGKILL possible ?(les signaux )

    Faut pas trop s'emballer sur la finalité du programme. Il me semble qu'hindou90 ne fait que tester comment fonctionnent les appels système d'unix.

    A+
    Dernière modification par Jack ; 15/02/2011 à 08h49.

  12. #11
    polo974

    Re : intercepter SIGKILL possible ?(les signaux )

    Citation Envoyé par bzh_nicolas Voir le message
    C'est un autre moyen efficace pour fermer un programme.
    Vu comme ça, effectivement...
    Jusqu'ici tout va bien...

  13. #12
    ProgVal

    Re : intercepter SIGKILL possible ?(les signaux )

    Citation Envoyé par Jack Voir le message
    Faut pas trop s'emballer sur la finalité du programme. Il me semble qu'hindou90 ne fait que tester comment fonctionnent les appels système d'unix.

    A+
    Oui, mais les mauvaises habitudes, on les prend quand on débute, pas une fois qu'on connaît

  14. #13
    Jack
    Modérateur

    Re : intercepter SIGKILL possible ?(les signaux )

    ok, je te laisse le soin de veiller à tout çà. Bon courage car tu vas avoir du boulot.
    Il va te falloir assumer maintenant.

    A+

Discussions similaires

  1. Les signaux de bande de base
    Par invite388914a8 dans le forum Physique
    Réponses: 1
    Dernier message: 16/01/2010, 18h15
  2. (help) les signaux periodique
    Par invite35464c84 dans le forum Mathématiques du collège et du lycée
    Réponses: 15
    Dernier message: 02/10/2009, 20h29
  3. Que signifient les termes petits signaux et grands signaux?
    Par invitec6f46d45 dans le forum Physique
    Réponses: 3
    Dernier message: 13/03/2009, 10h16
  4. Comparer les frequences de signaux
    Par invite709e62f3 dans le forum Électronique
    Réponses: 6
    Dernier message: 03/12/2008, 17h52
  5. les signaux électriques
    Par invite1ff1de77 dans le forum Santé et médecine générale
    Réponses: 5
    Dernier message: 19/08/2006, 21h22