According to UNIX advance programming documentation, the SIGFPE signal terminates the program and generates a core file.
Here is my program
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
static void sig_fpe(int signo);
int
main()
{
int pid;
if(signal(SIGFPE, sig_fpe) == SIG_ERR)
printf("Signal error\n");
pid = 10;
pid = pid / 0;
exit(0);
}
static void
sig_fpe(int signo)
{
if(signo == SIGFPE){
printf("SIGFPE signal catch\n");
}
}
When I run this program in linux machine, it prints "SIGFPE signal catch" repeatedly and does not terminate. The sample output is
SIGFPE signal catch
SIGFPE signal catch
SIGFPE signal catch
SIGFPE signal catch
SIGFPE signal catch
SIGFPE signal catch
SIGFPE signal catch
SIGFPE signal catch
SIGFPE signal catch
SIGFPE signal catch
SIGFPE signal catch
SIGFPE signal catch
SIGFPE signal catch
SIGFPE signal catch
SIGFPE signal catch
SIGFPE signal catch
SIGFPE signal catch
.
.
.
.
What is the problem?