#define MAX_FIGLI 10
int ex = 1;
int esegui (int nFigli) {
int ret;
pid_t pid;
pid = fork();
nFigli++;
if(nFigli == MAX_FIGLI)
exit(1);
if(pid == 0){
printf("figlio %d \n",nFigli);
esegui(nFigli++);
}
else {
pid_t attesa;
int stato;
do
{
/*printf("Prova2:%d\n",i);*/
attesa = waitpid(pid, &stato, 0);
}while(attesa < 0);
if(WIFEXITED(stato)) {
ret = WIFEXITED(stato);
printf("il figlio %d termina con %d \n",nFigli, ret);
}
}
return 0;
}
int main(int argc, char *argv[]) {
esegui(0);
return 0;
}
OK penso di esserci quasi riuscito ricorsivamente, unica cosa che non riesco a gestire è il valore di exit dal primo figlio in poi...
L'esecuzione mi stampa questo:
figlio 1
figlio 2
figlio 3
figlio 4
figlio 5
figlio 6
figlio 7
figlio 8
figlio 9
il figlio 9 termina con 1
il figlio 8 termina con 1
il figlio 7 termina con 1
il figlio 6 termina con 1
il figlio 5 termina con 1
il figlio 4 termina con 1
il figlio 3 termina con 1
il figlio 2 termina con 1
il figlio 1 termina con 1
Probabilmente è una cavolata ma non riesco a venirne fuori