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

C Discussion :

Comportement étrange du kill


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Comportement étrange du kill
    Bonsoir,

    J'essaye de savoir si un processus est en vie et j'utilise donc un kill(pid,0)... sauf que celui-ci renvoie toujours 0.

    Il me semble qu'il devrait renvoyer -1 lorsque le processus n'existe pas, pour tester celà, j'ai donc écrit le programme de test suivant :

    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
    17
    18
    19
    20
    21
    22
    23
    24
     
    #include <stdio.h>
    #include <unistd.h>
    #include <signal.h>
    #include <sys/wait.h>
     
    int main(){
        pid_t pid;
        int i;
        if ((pid = fork()) != 0){
            if (kill(pid, 0) == 0)
                printf("en vie ! - pid = %d\n",pid);
            if (kill(pid, 0) == 0)
                printf("toujours en vie ! - pid = %d\n", pid);
            if (kill(pid, 9) == 0)
                printf("tué ! %d\n",pid);
            if (kill(pid, 0) != 0)
                printf("%d est mort ! \n", pid);
        }
        else {
            printf("j'existe !!!!!!!!!!!!!\n");
        } 
        return 0;
    }
    En m'attendant à voir afficher :
    en vie ! - pid = xxxx
    toujours en vie ! - pid = xxxx
    tué ! xxxx
    xxxx est mort !
    Mais j'obtiens :
    en vie ! - pid = xxxx
    toujours en vie ! - pid = xxxx
    tué ! xxxx
    Et je ne comprends pas, j'ai bien essayé de faire attendre le père après le kill(pid,9), de bidouiller un peu dans tous les sens et j'ai toujours le même résultat.

    Quelqu'un saurait-il m'expliquer ce comportement ?

    D'avance merci pour votre aide.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 368
    Points : 23 620
    Points
    23 620
    Par défaut
    Si tu tues le processus fils, il devient zombie jusqu'à ce que le père fasse un wait() dessus. Entre temps, il reste dans la liste des processus existants même s'il est inactif, et kill() considère que l'envoi d'un signal est légitime.

    C'est d'ailleurs écrit dans la man page :

    Citation Envoyé par man 2 kill
    ESRCH
    Le processus ou le groupe de processus n'existe pas. Remarquez qu'un processus existant peut être un zombie, c'est à dire qu'il s'est déjà terminé mais que son père n'a pas encore lu sa valeur de retour avec wait().

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Points : 4
    Points
    4
    Par défaut


    Oki doki, du coup il suffisait d'un waitpid(pid, NULL, WNOHANG) pour faire fonctionner le tout !

    Merci beaucoup Obsidian

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 368
    Points : 23 620
    Points
    23 620
    Par défaut
    De rien, mais n'oublie pas !

    À bientôt.

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

Discussions similaires

  1. [Forms6i] Un IF-ELSIF au comportement étrange
    Par lafouine dans le forum Forms
    Réponses: 11
    Dernier message: 13/09/2005, 15h40
  2. Comportement étrange apres une désinstallation
    Par Sunchaser dans le forum Excel
    Réponses: 4
    Dernier message: 06/08/2005, 19h44
  3. comportement étrange d'une jointure ...
    Par amenis dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 10/02/2005, 21h27
  4. [Système][Runtime][Exec] Comportement étrange au lancement de BeSweet
    Par divxdede dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 06/06/2004, 09h54
  5. Réponses: 2
    Dernier message: 22/09/2003, 11h23

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