Heim >Backend-Entwicklung >C++ >Wie führt man Zombie- und Waisenprozesse in einem einzigen C-Programm aus?
In diesem Abschnitt erfahren Sie, wie Sie Zombie- und Waisenprozesse in einem einzigen Programm in C/C++ ausführen. Bevor wir zum Punkt kommen, wollen wir zunächst verstehen, was Zombie-Prozesse und verwaiste Prozesse sind.
Ein Zombie-Prozess ist ein Prozess, dessen Ausführung abgeschlossen ist, der aber noch über verbleibenden Speicherplatz verfügt. Eintrag in der Prozesstabelle. Zombie-Prozesse treten normalerweise in untergeordneten Prozessen auf, da der übergeordnete Prozess weiterhin den Exit-Status seines untergeordneten Prozesses lesen muss. Sobald dies mithilfe des Systemaufrufs „wait“ erfolgt ist, wird der Zombie-Prozess aus der Prozesstabelle entfernt. Dies wird als Harvesting-Zombie-Prozesse bezeichnet.
Verwaiste Prozesse sind Prozesse, die noch ausgeführt werden, obwohl ihr übergeordneter Prozess beendet oder abgeschlossen wurde. Ein Prozess kann absichtlich oder unabsichtlich verwaist werden.
Absichtlich verwaiste Prozesse laufen ohne manuelle Unterstützung im Hintergrund. Dies geschieht normalerweise, um einen Dienst zu starten, der auf unbestimmte Zeit ausgeführt wird, oder um einen Job mit langer Laufzeit abzuschließen, ohne dass der Benutzer es bemerkt.
Verwaiste Prozesse werden versehentlich erstellt, wenn ihr übergeordneter Prozess abstürzt oder beendet wird. Verwenden Sie den Prozessgruppenmechanismus, um unbeabsichtigte verwaiste Prozesse zu vermeiden.
Jetzt führen wir im folgenden Code gleichzeitig den Zombie-Prozess und den Waisenprozess aus. Hier haben wir einen übergeordneten Prozess, der einen untergeordneten Prozess hat, und dieser untergeordnete Prozess hat einen weiteren untergeordneten Prozess. Wenn unser Steuerelement in einen untergeordneten Prozess eingefügt wird, stoppen wir die Ausführung für 5 Sekunden, damit der übergeordnete Prozess abgeschlossen werden kann. Daher wird der untergeordnete Prozess zu einem verwaisten Prozess. Der Enkelprozess wird dann in einen Zombie-Prozess umgewandelt. Der Enkelprozess schließt die Ausführung ab, wenn sein übergeordneter Prozess (ein untergeordneter Prozess des Hauptprozesses) eine Sekunde lang schläft. Daher ruft der Enkelprozess nicht „terminate“ auf und sein Eintrag bleibt in der Prozesstabelle vorhanden.
#include <stdio.h> #include <unistd.h> int main() { int x = fork(); //create child process if (x > 0) //if x is non zero, then it is parent process printf("Inside Parent---- PID is : %d</p><p>", getpid()); else if (x == 0) { //for chile process x will be 0 sleep(5); //wait for some times x = fork(); if (x > 0) { printf("Inside Child---- PID :%d and PID of parent : %d</p><p>", getpid(), getppid()); while(1) sleep(1); printf("Inside Child---- PID of parent : %d</p><p>", getppid()); }else if (x == 0) printf("Inside grandchild process---- PID of parent : %d</p><p>", getppid()); } return 0; }
soumyadeep@soumyadeep-VirtualBox:~$ ./a.out Inside Parent---- PID is : 3821 soumyadeep@soumyadeep-VirtualBox:~$ Inside Child---- PID :3822 and PID of parent : 686 Inside grandchild process---- PID of parent : 3822 soumyadeep@soumyadeep-VirtualBox:~$
Das obige ist der detaillierte Inhalt vonWie führt man Zombie- und Waisenprozesse in einem einzigen C-Programm aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!