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:
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);
}
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?
Grazie.