/* Scrivere un programma C in cui un processo padre genera N figli e li aspetta tutti */ #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++){ if ((pid = fork()) < 0){ printf("Errore nella fork\n\n"); exit(3); } if (pid == 0){ srand(getpid()); time = (rand() % 10) + 1; /* per ogni figlio stampo un messaggio a video */ printf("figlio %d del padre %d\n", getpid(), getppid()); sleep(time); exit(i); /* esce dal ciclo */ } } /*padre*/ printf("generati %d figli\n", N); /* attendo che siano finiti tutti i processi figli e stampo il valore di exit */ for (i=0; i>8 & 0xFF) ); } }