/*Beispiel mit signal()*/
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>

typedef void Sigfunc(int);
Sigfunc *signal(int, Sigfunc *);
static void catchsignal(int sig);

int Setsignal(void)
{
 if(signal(SIGCHLD,catchsignal) == SIG_ERR)
   {
     fprintf(stderr,"SIGCHLD catch failed.\n");
     exit(2);
   }
}

static void catchsignal(int sig)
{
 switch(sig)
  {
    case SIGCHLD : printf("Eltern :Signal SIGCHLD von %d bekommen!!!\n"
                           ,getpid());
                   break;
    default      : printf("Unbekanntes Signal erhalten!!!\n");
                   break;
  }
}


int main(int argc, char **argv)
{
 pid_t kind1;
 int status;

 while(1)
  {
   switch(kind1=fork())
    {
     case -1 :   printf("Fehler bei fork()..........\n");  exit(0);
     case 0  :   sleep(5);
                 printf("Kindprozess ist fertig!!\n\n");
                 exit(1);
     default :   printf("Elternprozess schläft 30 sec.\n");
                 Setsignal();
                 wait(NULL);
                 sleep(30);
                 printf("Elternprozess ist fertig\n");
                 exit(2);
    }
  }
 return 0;
}