#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