Je suis en train de faire une ferme de processeur C. Je commence par les files d'attente de message d'ouverture, et essayer ensuite de faire des processus de travail: (notez que NROF_WORKERS est 5)Seulement 1 enfant après 5 fourchettes (C)
static void
makechildren (void) {
// Only the parent should fork. Any children created will become workers.
pid_t processID;
pid_t farmerPID = getpid(); // To identify who the farmer is
// Loop creating processes, indexed by NROF_WORKERS
int i = 0;
while (i < NROF_WORKERS){
if (getpid() == farmerPID){
i++;
printf ("Parent is creating a child!%d\n", getpid());
processID = fork();
}
}
if (processID < 0){
perror("fork() failed");
exit(1);
}
else {
// If parent, start farming
if (processID == farmerPID) {
printf("Parent reporting in!%d\n");
}
// If child, become a worker
if (processID == 0) {
printf("Child reporting in!%d\n", getpid());
join();
}
}
}
Comme vous pouvez le voir, je veux que le parent signale chaque fois qu'un enfant est créé, et ensuite je veux que le parent et tous les enfants à signaler. Cependant, cela est tout ce que je reçois:
Parent is creating a child!11909
Parent is creating a child!11909
Parent is creating a child!11909
Parent is creating a child!11909
Parent is creating a child!11909
Child reporting in!11914
Maintenant, je fais remarquer la différence de 11909 et 11914 est 5. Donc, ma question: sont les autres processus créés? Si oui, comment se fait-il qu'ils ne rapportent pas? Et si non, qu'est-ce que je fais de mal? En outre, le parent ne rapporte pas du tout, comment cela est-il causé?