Ciao a tutti!!![]()
Devo scrivere un programmino che generi un certo numero, preso in input, di figli e ne aspetti solo uno prima di uscire. Io ho scritto questo codice:
Il problema è che quando lo faccio partire mi stampa per n volte "Sono il figlio e sto scrivendo qualcosa su stdout" e poi il controllo if(wait(&status) != pid) fallisce. Non si sa chi verrà eseguito per primo se il figlio o il padre (infatti dipende dall'implementazione del sistema) ma a me sembra che venga eseguito sempre per primo il figlio. Come faccio a fare una cosa del genere?codice:#include <sys/wait.h> #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]){ pid_t pid; int status, children, i; if(argc!=2){ printf("Usage: wait <number of children>"); exit(1); } children=atoi(argv[1]); for(i=0; i<children; ++i){ if((pid = fork()) < 0) perror("Fork failed"); else if(pid == 0){ printf("Sono il figlio e sto scrivendo qualcosa su stdout\n"); exit(0); } else printf("Ho generato il figlio %d con pid %d\n",i+1,pid); } if(wait(&status) != pid){ printf("Wait failed\n"); exit(1); } printf("Uno dei miei figli ha finito, quindi finisco pure io\n"); exit(0); }
Grazie.

