Dans cette section, nous apprendrons comment exécuter des processus zombies et orphelins dans un seul programme en C/C++. Avant d’entrer dans le vif du sujet, comprenons d’abord ce que sont les processus zombies et les processus orphelins.
Le processus Zombie fait référence à un processus qui a terminé son exécution mais qui a encore de l'espace restant. Entrée dans la table des processus. Les processus zombies se produisent généralement dans les processus enfants car le processus parent doit toujours lire l'état de sortie de son processus enfant. Une fois cela fait à l’aide de l’appel système wait, le processus zombie est éliminé de la table des processus. C’est ce qu’on appelle la récolte de processus zombies.
Les processus orphelins sont les processus qui sont toujours en cours d'exécution même si leur processus parent est terminé ou terminé. Un processus peut devenir orphelin, intentionnellement ou non.
Les processus intentionnellement orphelins s'exécuteront en arrière-plan sans aucune assistance manuelle. Ceci est généralement effectué pour démarrer un service qui s'exécute indéfiniment ou pour terminer un travail de longue durée sans que l'utilisateur ne s'en aperçoive.
Les processus orphelins sont créés par inadvertance lorsque leur processus parent plante ou se termine. Utilisez le mécanisme de groupe de processus pour éviter les processus orphelins involontaires.
Maintenant, dans le code ci-dessous, nous exécuterons simultanément le processus zombie et le processus orphelin. Ici, nous avons un processus parent, qui a un processus enfant, et ce processus enfant a un autre processus enfant. Si notre contrôle est inséré dans un processus enfant, alors nous arrêterons l'exécution pendant 5 secondes afin qu'il puisse terminer le processus parent. Le processus enfant devient donc un processus orphelin. Le processus petit-enfant sera alors converti en processus zombie. Le processus petit-enfant termine son exécution lorsque son processus parent (un enfant du processus principal) se met en veille pendant 1 seconde. Par conséquent, le processus petit-enfant n’appellera pas terminate et son entrée existera dans la table des processus.
#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:~$
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!