#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


This topic: Sistemioperativi1 > EsempioFork
Topic revision: r1 - 2001-12-10 - AntonioValletta
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback