#include <signal.h> // for sigaction(), raise()
// signal.h includes bits/types/sig_atomic_t.h, which defines sig_atomic_t
// signal.h includes bits/sigaction.h, which defines struct sigaction
// signal.h includes bits/signum.h, which defines SIGUSR1:
// /usr/include/x86_64-linux-gnu/bits/signum.h:
// #define SIGUSR1 10
#include <stdio.h> // for printf(), NULL
#include <string.h> // for memset()
#include <limits.h> // for INT_MAX
sig_atomic_t sigusr1_count = 0;
void handler (int signal_number)
{
sigusr1_count++;
}
int main()
{
struct sigaction sa;
memset (&sa, 0, sizeof (sa));
sa.sa_handler = &handler;
sigaction (SIGUSR1, &sa, NULL); // call handler() on SIGUSR1
printf("SIGUSR1 = %d\n", SIGUSR1);
unsigned int i,j,k;
unsigned long l;
for (i = 0; i < 1000; i++)
{
for (j = 0; j < 1100; j++)
{
for (k = 0; k < 2000; k++)
{
l = i * j * k;
if (l > INT_MAX)
{raise(SIGUSR1);}
}
}
}
printf ("SIGUSR1 was raised %d times\n", sigusr1_count);
return 0;
}
/*
gcc sigusr1.c -o sigusr1
./sigusr1
SIGUSR1 = 10
SIGUSR1 was raised 4355 times
*/