/* * genera una discendenza di processi con N livelli * ogni processo generato genera un altro processo figlio * e attende che termini */ #include main(int argc, char *argv[]) { int i, N; int pid, status; if (argc < 2) { printf("USO: %s N\ngenera una discendenza di N livelli\n\n", argv[0]); exit(0); } N = atoi(argv[1]); 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(1); } if (pid != 0) /* il padre */ break; /* esce dal ciclo */ else /* il filgio */ printf("figlio %d del padre %d\n", getpid(), getppid()); } pid = wait(&status); if (pid < 0) printf("%d sono l'ultimo discendente\n", getpid()); else printf("il figlio %d ha terminato\n", pid); /* if (pid != 0) { printf("generati %d figli\n", N); for (i=0; i>8)); } } else exit(i); */ }