>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