/* SIGNAL CON TERMINAZIONE DEL PROCESSO KILLATO: signal-kill.c */

#include<stdio.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<signal.h>

pippo() /* operazione da eseguire alla ricezione di una kill */
   {
   printf("\n (padre) RICEVUTO INTERRUPT \n");
   }

main()
{
int i,n,w;


n = fork();
if (n == -1)
   {
   fprintf(stderr,"fork fallita\n");
   exit(1);
   }
   else
      if ( n == 0)  /* processo figlio */
	 {
	 printf("\n(figlio) il mio process-id e` %d\n",getpid());
	 printf("\n(figlio) ora aspetto 3 secondi e poi 
                                 invio una signal a %d\n",getppid());
	 fflush(stdout);
	 for (i=0; i<3; i++)
		 {
		 system("sleep 1");
		 printf(".\n");
		 }
         kill(getppid(),SIGKILL);
	 printf("\n(figlio) ho finito e muoio\n");
	 exit(0);
	 }
	 else       /* processo padre */
	    {
	    signal(SIGKILL,SIG_DFL);
	    printf("\n(padre) il mio process-id e` %d\n",getpid());
	    printf("\n(padre) ora incomincio le mie operazioni\n");
	    for (i = 0; i < 6; i++)
		  {
		  system("sleep 1");
		  printf("*\n");
		  }
	    printf("\n(padre) ora muoio anch'io\n");
	    exit(0);
	    }
}
