/* FILE: status2.c */ #include #include #include #include int main () { int pid, pidFiglio, status, exit_s; if ((pid = fork()) < 0) { /* fork fallita */ printf("Errore in fork\n"); exit(1); } if (pid == 0) { /* figlio */ printf("Esecuzione del figlio\n"); sleep(4); exit(5); } /* padre */ printf("Generato figlio con PID = %d\n", pid); 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 ((status & 0xFF) != 0) printf("Figlio terminato in modo involontario\n"); else { exit_s = status >> 8; /* selezione degli 8 bit piu' significativi */ exit_s &= 0xFF; printf("Per il figlio %d lo stato di EXIT e` %d\n", pid, exit_s); } exit(0); }