Warum zombie-Prozesse existieren?

Wikipedia sagt: "Ein Kind-Prozess, der beendet ist, aber noch nie gewartet, auf durch seine Eltern wird ein zombie-Prozess." Ich dieses Programm ausführen:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
    pid_t pid, ppid;
    printf("Hello World1\n");
    pid=fork();
    if(pid==0)
    {
        exit(0);    
    }
    else
    {
        while(1)
        {
        printf("I am the parent\n");
        printf("The PID of parent is %d\n",getpid());
        printf("The PID of parent of parent is %d\n",getppid());        
        sleep(2);
        }
    }
}

Dieser erstellt einen zombie-Prozess, aber ich kann nicht verstehen, warum ein zombie-Prozess ist hier angelegt?

Die Ausgabe des Programms ist

Hello World1
I am the parent
The PID of parent is 3267
The PID of parent of parent is 2456
I am the parent
The PID of parent is 3267
The PID of parent of parent is 2456
I am the parent
....
.....

Aber warum ist es, dass die "Kind-Prozess beendet wird, aber nicht gewartet auf durch seine Eltern" in diesem Fall?

Sind Sie Fragen, warum das Konzept einer zombie-Prozess eingeführt wurde, in Unix? Wie es aussieht, die einzige Antwort auf Ihre Frage, die ich sehe, ist "weil das ist, wie zombie-Prozesse sind definiert".
"konnte nicht verstehen, warum zombie-Prozess erstellt werden, hier" werden würden, weil Sie nicht aufrufen wait() zu Lesen, das Kind der exit-status, und damit auch deren Eintrag hinterlassen wird, in der Prozess-Tabelle.
Das ist ok. Aber wenn Kind läuft seit einiger Zeit existiert und es gibt keine zombie
Ja, zombies sind lebende tote. Zombie-Prozesse sind gestorben (entweder von einem signal oder weil Sie verlassen haben), und der übergeordnete Prozess hat noch nicht ausgeführt, eine wait() für den Prozess. Der zombie ist tot, aber immer noch nimmt eine Prozess-Tabelle slot und wird dies auch weiterhin tun, bis seine Eltern wartet, bis es oder der allein sorgeberechtigte Elternteil wird beendet. Wenn der parent beendet wird, wird das Kind vererbt werden, die durch die init Prozess (in der Regel PID 1), und eines der Hauptziele dieses Prozesses (wenn nicht der einzige), ist zu warten, bis die Kinder sterben.
Der Kind-Prozess führt die exit(0); damit beendet. Der parent-Prozess in eine unendliche Schleife ohne zu warten, für Ihr Kind zu sterben. In diesem Zusammenhang warten bedeutet 'Aufruf einer der Funktionen wait() oder waitpid() oder eine der verschiedenen system-abhängigen alternativen wie wait3() oder wait4()'. Es bedeutet nicht nur 'der Eltern geht auf Leben'. Wenn das Kind nicht sterben, es ist nicht möglich zombie-Prozess; zombie-Prozesse sind tot.

InformationsquelleAutor user567879 | 2013-04-18

Schreibe einen Kommentar