/* FILE: provaValoriWait.c */ #include #include #include #include int main () { int pid, pidFiglio, status; int valore; if ((pid = fork()) < 0) { /* fork fallita */ printf("Errore in fork\n"); exit(1); } if (pid == 0) { /* figlio */ printf("Esecuzione del figlio\n"); /* sleep(4); */ printf("Dammi un valore intero per provare la exit:\n"); scanf("%d", &valore); if ((valore > 255) || (valore <0)) printf("ATTENZIONE IL VALORE SARA' TRONCATO!\n"); else printf("Il valore fornito non verra' troncato!\n"); exit(valore); } /* 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 { printf("Valore di WIFEXITED(status) %d\n", WIFEXITED(status)); printf("Per il figlio %d lo stato di EXIT e` %d\n", pid, WEXITSTATUS(status)); } exit(0); }