Danke
germgerm auf die idee bin ich noch nich gekommen

Dachte es liegt an meinen bescheidenen C Kentinissen, da ich sonst fast nur Java programmiere.
Hier noch der funktionierende Code für alle die es interessiert
Code:
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
void childProcess();
volatile int signo = 0;
volatile int a=10;
volatile int b=0;
volatile int c;
void childProcess(){
int pid;
pid = fork();
if (pid == 0){
/* Childprocess*/
sleep (1);
exit (5);
}else if (pid > 0){
/* Parentprocess*/
}else{
/*Error by fork()*/
fprintf (stderr, "Error");
exit (1);
}
}
static void pSigHandler(int sig){
printf("Wake up call ... !!! - Catched signal: %d ... !!\n", sig);
if((sig==SIGFPE)||(sig==SIGSEGV)){
/*wihtout ignoring SIGFPE, infinity loop*/
signal(SIGFPE,SIG_IGN);
signal(SIGSEGV,SIG_IGN);
}
signo=sig;
}
int main(int argc, char* argv[])
{
int i;
int *s=0;
/*Parentprocess*/
struct sigaction psa;
psa.sa_handler = pSigHandler;
for ( i = 0; i < 32; i++ ) {
sigaction(i, &psa, NULL);
}
if(argc<=1){
printf("No signal choosed\n");
}else{
int param=atoi(argv[1]);
switch(param){
case 1:
/*Timer has run down errorsignal*/
alarm(5);
break;
case 2:
/*Divide by zero errorsignal*/
c=a/b;
break;
case 3:
/*Child has canged errorsignal*/
childProcess();
break;
case 4:
/*Segmentation fault errorsignal*/
*s=0;
break;
}
}
while(sleep(5)){}
printf("signal number (zero if no signal): %d\n",signo);
return 0;
}