Aus Lerngründen habe ich einen Code geschrieben, um Zombie-Prozesse zu generieren. Hier ist der Code:Ein Child-Prozess, der Exit() aufruft, aber kein Zombie wird
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
pid_t pid;
int main() {
pid = fork();
if (pid == 0) {
exit(0);
} else {
printf("the child process is %d", pid);
sleep(20);
}
}
In meiner Annahme, die Codes oben sollte in einer solchen Art und Weise verhalten: das Kind Prozess erhalten pid
von 0 und exit
mit dem Statuscode 0; Der übergeordnete Prozess erhält pid
des untergeordneten Prozesses und wird ausgedruckt und für 20 Sekunden in den Ruhezustand versetzt. Da der übergeordnete Prozess wait
nicht aufruft, wenn der untergeordnete Prozess ist, sollte der untergeordnete Prozess etwa 20 Sekunden lang Zombie sein.
Wenn ich jedoch die Codes ausführe, wartet es ungefähr 20 Sekunden und druckt die PID des Kindprozesses aus. In den 20 Sekunden erscheint der Kindprozess nicht in ps -l
als Zombie-Prozess.
Kann mir jemand sagen, was den Unterschied zwischen meinem Verständnis der Codes und ihrem tatsächlichen Verhalten ausmacht?
P.S. Ich benutze Mac OS Sierra.
Versuchen Sie, eine neue Zeile "\ n" zu Ihrem Druck hinzuzufügen ... stdout ist gepuffert. – technosaurus
Hinzufügen von "\ n" hilft, die Nachricht auszudrucken, danke! Der Kindprozess wird jedoch immer noch kein Zombie. – Musen