/* FILE: figlio-zombieConStato.c */ #include #include #include #include int main () { int pid, pidFiglio, n, status; if ((pid = fork()) < 0) { /* fork fallita */ printf("Errore in fork\n"); exit(1); } if (pid == 0) { /* figlio */ printf("Esecuzione del figlio %d\n", getpid()); exit(0); } /* padre */ printf("Ho generato il figlio %d\n", pid); printf("Esecuzione del padre %d\n", getpid()); printf("Fornisci un valore intero\n"); scanf("%d", &n); printf("Numero letto dal padre %d\n", n); if ((pidFiglio=wait(&status)) < 0) { printf("Errore in wait\n"); exit (1); } if (pid == pidFiglio) printf("Terminato figlio con PID = %d\n", pidFiglio); else exit(2); if (WIFEXITED(status) == 0) printf("Errore in status\n"); else printf("Per il figlio %d lo stato di EXIT e` %d\n", pid, WEXITSTATUS(status)); exit(0); }