C++ (fork () — création d'une “liste” de processus

J'ai un programme qui crée de nouveaux processus "un par un". Est-il possible de modifier ce code de sorte qu'il crée une "liste" de processus – c'est à dire de l'enfant 1 étant le parent de l'enfant 2, enfant 2 étant le parent de l'enfant 3, etc.?

#include <string>
#include <iostream>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include "err.h"

using namespace std;
int main ()
{
 pid_t pid;
 int i;

 cout << "My process id = " << getpid() << endl;

 for (i = 1; i <= 4; i++)
  switch ( pid = fork() ) {
  case -1:
    syserr("Error in fork");

  case 0:
    cout << "Child process: My process id = " << getpid() << endl;
    cout << "Child process: Value returned by fork() = " << pid << endl;
    return 0;

  default:
    cout << "Parent process. My process id = " << getpid() << endl;
    cout << "Parent process. Value returned by fork() = " << pid << endl;

   if (wait(NULL) == -1) 
   syserr("Error in wait");

 }  
 return 0;
 }
cette habitude de créer 4 processus,il crée 2^4 processus
Si l'enfant 1 est d'être le parent d'un enfant de 2, alors le processus d'origine ne sais rien à propos de l'enfant de 2 à moins que ce soit l'enfant 1 enfant ou 2 dit-il; le problème est plus grave pour un enfant de 3 puis de l'enfant 4. Bien que l'enfant 4 pourrait connaître de tous ses ancêtres, ses ancêtres ne savez rien à propos de leurs plus lointains descendants.
Pourquoi voulez-vous créer le processus de hiérarchie dans un linéaire, les plus éloignés de la mode? Au lieu de cela, il est probablement plus utile pour un parent seul à être directement liées à tous ses enfants. De cette façon, le parent peut avoir une seule table contenant tous les enfants du PIDs, par exemple. Dans votre scénario, chaque processus connaît un seul parent et un enfant. Le travail supplémentaire doit être fait pour communiquer ce qu'ils savent, ou à examiner le processus de hiérarchie pour découvrir toutes les relations.

OriginalL'auteur user2262230 | 2013-06-03