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
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.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); } } }
io vorrei invece ottenere solamente due processi figli e basta.chi mi può aiutare?

Rispondi quotando