Re: defunct

Top Page

Reply to this message
Author: guilde.nt
Date:  
To: guilde
CC: guilde
Subject: Re: defunct
>question à deux balles : puisque cela a l'air de bien fonctionner sous
>Linux, pourquoi est-ce une plaie dans un UNIX propriétaire (genre
>Solaris pour ne pas le nommer par exemple ?)


Ce n'est pas différent sous Linux ; essaie ce programme :

#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>

int main(void)
{
if (fork()) pause() ;
else exit(1) ;
}

$ ps -efH
...
24763  8264  0 18:22 pts/6    00:00:00       ./a.out
24764 24763  0 18:22 pts/6    00:00:00         [a.out] <defunct>


On pourrait penser que le script suivant :

#!/bin/bash
exit 10 &
sleep 1000

créerait un zombie ; mais non :

24783 21662  0 18:30 pts/7    00:00:00       /bin/bash ./x
24785 24783  0 18:30 pts/7    00:00:00         sleep 1000


Le processus 24784 a disparu de la table des processus, et ce pid sera
recyclé ; 'bash' se tient probablement informé de l'état de chacun de ses
fils même si on redéfinit 'trap "" CHLD', récupère le code de sortie dès
qu'il est disponible et le communique à la demande -- et même autant
de fois qu'on le demande -- :

$ exit 10 &
[1] 24789
$ wait 24789
$ echo $?
10
$ echo $?
0
$ wait 24789
$ echo $?
10

-Nicolas