/* Scrivere un programma C in cui un processo padre genera N figli e aspetta solo il primo che termina */ #include #include main(int argc, char *argv[]){ int i, N, time; int pid, status; /*Controllo il numero dei parametri*/ if (argc < 2){ printf("USO: %s N\ngenera N processi figli\n\n", argv[0]); exit(1); } /*Recupero il numero dei processi da generare*/ N = atoi(argv[1]); /* N deve essere strettamente positivo */ if (N <= 0) { printf("USO: %s N\ngenera N processi figli\n\n", argv[0]); exit(2); } printf("padre %d genera %d figli\n", getpid(), N); for (i=0; i < N; i++){ pid = fork(); if (pid < 0){ printf("Errore nella fork\n\n"); exit(3); } if (pid == 0){ srand(getpid()); time = (rand() % 10) + 1 ; sleep(time); /* per ogni figlio stampo un messaggio a video */ printf("figlio %d del padre %d\n", getpid(), getppid()); exit(i); /* esce dal ciclo: torna al padre il suo indice */ } } /*padre*/ printf("generati %d figli\n", N); /* attendo che sia finito uno tra i processi figli e stampo il valore di exit */ pid = wait(&status); printf("il primo figlio ha terminato con stato %d\n",(status>>8 & 0xFF) ); }