Heim  >  Artikel  >  Backend-Entwicklung  >  Wie führt man Zombie- und Waisenprozesse in einem einzigen C-Programm aus?

Wie führt man Zombie- und Waisenprozesse in einem einzigen C-Programm aus?

WBOY
WBOYnach vorne
2023-08-25 16:21:061310Durchsuche

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.

Zombie-Prozess

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

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.

Beispielcode

#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;
}

Ausgabe

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen

In Verbindung stehende Artikel

Mehr sehen