#include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #include <stdlib.h> int i = 0; int main() { pid_t p_ret,p_ch; int status; if ( (p_ch = fork()) == 0 ) {/* figlio */ printf("Figlio: fork ha ritornato %d\n",p_ch); printf("Figlio: il pid del figlio e' %d\n",getpid()); printf("Figlio: il pid del padre e' %d\n",getppid()); i = 5; printf("Figlio: i vale %d\n",i); printf("Figlio: situazione processi\n"); system("ps j"); sleep(2); printf("Figlio: exit()\n"); exit(7); /* restituisco 7 come codice di ritorno */ } /* padre */ sleep(1); printf("Padre: fork ha ritornato %d : questo e' il pid del figlio\n",p_ch); printf("Padre: il pid del padre e' %d\n",getpid()); printf("Padre: i vale %d\n",i); printf("Padre: comincia la wait\n"); p_ret = wait(&status); printf("Padre: wait ha ritornato %d\n",p_ret); if (WIFEXITED(status)) { printf("Padre: codice di ritorno di child %d\n",WEXITSTATUS(status)); } if (WIFSIGNALED(status)) { printf("Padre: segnale che ha terminato child %d\n",WTERMSIG(status)); } /* il caso seguente puo' verificarsi solo usando la waitpid() con WUNTRACED, non la wait() che si bloccherebbe */ if (WIFSTOPPED(status)) { printf("Padre: segnale che ha causato lo stop di child %d\n",WSTOPSIG(status)); } return 0; }-- AntonioValletta - 10 Dec 2001
![]() |
![]() |
Questo sito usa cookies, usandolo ne accettate la presenza. (CookiePolicy)
Torna al Dipartimento di Informatica ![]() |
|
![]() |
![]() |