Salut
J'ai essayé de créer un zombie avec le programme suivant:
Code:
int main(void)
{
pid_t pid;
int status;
if ((pid = fork()) < 0)
perror("fork error");
else if (pid == 0){ /* child process*/
exit(0);
}
printf("child process ID: %d\n", pid);
sleep(10);
return 0;
}
Je peux observer le "Z" état avec la commande ps, mais ce processus zombie (le processus de l'enfant) n'existe que dans la durée de sa résiliation à la résiliation de son parent. Je ne suis pas d'attente () de l'enfant dans le processus parent, alors pourquoi ne pas le processus zombie exister après la fin des parents?
En <apue2>,
Citation:
Mais qu'advient-il si le parent se termine avant que l'enfant? La réponse est
que le processus init est le processus parent d'un processus dont les
parent se termine. Nous disons que le processus a été hérité par init. Quoi
qui se passe normalement, chaque fois qu'un processus se termine, le noyau va
à travers tous les processus actifs pour voir si la résiliation est la
parent d'un processus qui existe toujours.
|
Ma compréhension est la suivante: au moment où le parent se termine, s'il ya des enfants processus déjà terminé et encore en cours d'exécution, init adoptera le fonctionnement proches, non pas ceux déjà résilié. (ne pas les "actifs" et "toujours" en moyenne apue2 ce?) Ainsi, un processus zombie enfant ne sera pas adopté par init. Dans mon cas, au moment où le parent se termine, l'enfant n'est pas "actif" et ne sera pas adopté par init.
En outre, le processus enfant dans mon programme disparaît immédiatement après la fin des parents. Comme je l'ai décrit, je ne pense pas que cela est fait par init, puis qui l'a fait?