Hi
Ich habe versucht, ein Zombie-Prozess mit dem folgenden Programm:
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;
}
Ich kann die "Z"-Status mit dem Befehl ps, aber das Zombie-Prozess (der Kind-Prozess) gibt es nur in der Dauer von seiner Kündigung an ihre Muttergesellschaft Kündigung. I don't wait () das Kind in den Eltern, warum also nicht die Zombie-Prozess gibt es nach der Muttergesellschaft beendet?
In <apue2>,
Zitat:
Aber was passiert, wenn die Eltern beendet, bevor das Kind? Die Antwort ist
, dass die init-Prozess wird die Muttergesellschaft von jedem Prozess, dessen
Eltern beendet. Wir sagen, dass der Prozess wurde vererbt von init. Was
normalerweise passiert ist, dass, wenn ein Prozess beendet, der Kernel geht
über alle aktiven Prozesse, um zu sehen, ob die Einstellung ist die
Eltern eines jeden Prozesses, die noch vorhanden ist.
|
Nach meinem Verständnis ist dies: von der Zeit der Eltern endet, wenn es bereits Child-Prozesse beendet und immer noch läuft, wird die init ausgeführt werden, nicht die bereits beendet sind. (nicht die "aktive" und "immer noch" in apue2 bedeutet das?) Ein Zombie-Kind-Prozess wird nicht angenommen werden von init. In meinem Fall, von dem Zeitpunkt, als die Eltern beendet, das Kind ist nicht "aktiv" und nicht die von init.
Außerdem, das Kind in meinem Programm verschwindet unmittelbar nach der Muttergesellschaft beendet. Wie ich bereits beschrieben, ich glaube nicht, dass dies geschieht durch die init, wer hat?