avrei un problema da risolvere.devo svolgere questo esercizio
Implementare il seguente problema: Un processo padre genera un processo figlio e un processo fratello.
Il figlio a sua volta genera un processo nipote.
Ciascun processo stampa a schermo il proprio pid e il pid del processo che l'ha generato
e si mette in attesa della morte del figlio (qualora ne abbia)
io inizio impostando il primo pezzo di esercizio
codice:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main (int argc, char *argv[])
{
pid_t child_pid[1]; //Pid Figli
pid_t nephew_pid[1]; //Pid Nipoti generati dai figli
int i,stat_val;
printf("Inizio programma\n");
printf("Main Process PID= %d\n", (int) getpid());
for (i=0; i<2; i++) // durante il secondo ciclo la fork viene eseguita sia dal processo padre sia dal processo figlio creato tramite il primo ciclo creando così 3 processi
{
child_pid[i]=fork();
if(child_pid<0)
perror("chiamata a fork fallita\n");
else if(child_pid[i]!=0) // Mi trovo nel contesto del padre
printf("Figlio: PID=[%d] generato dal Padre: PID[%d]\n", child_pid[i], (int) getpid());
}
for(i=0; i<2; i++){
if(child_pid[i]!=0){
pid_t child_pid=wait(&stat_val);
}
}
}
purtroppo come risultato ottengo tre processi figli anziché due.questo perché durante il secondo ciclo il processo forka il padre ed il primo processo figlio creato in precedenza.ottenendo così quattro processi: il processo padre.due processi figli ed un processo nipote del primo processo figlio creato.
io vorrei invece ottenere solamente due processi figli e basta.chi mi può aiutare?