Maison  >  Article  >  développement back-end  >  Comment exécuter des processus zombies et orphelins dans un seul programme C ?

Comment exécuter des processus zombies et orphelins dans un seul programme C ?

WBOY
WBOYavant
2023-08-25 16:21:061273parcourir

Comment exécuter des processus zombies et orphelins dans un seul programme C ?

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.

Processus Zombie

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.

Processus orphelins

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.

Exemple de code

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

Sortie

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer