#include #include #include #include using namespace std; void HitMe() { static int calls = 1; cout << "Hit me call number " << calls << endl; raise(SIGUSR1); calls++; cout << endl; return; } void USR1Handler(int n) { static int count = 1; cout << "USR1 signal has been handled " << count << " times " << endl; count++; if (count == 3) { cout << endl; cout << "Calling HitMe in the signal handler " << endl; HitMe(); } cout << "Exiting the signal handler " << count-1 << endl; return; } void SignalReport (sighandler_t sig) { if (sig == SIG_ERR) { perror("signal"); } else if (sig == SIG_DFL) { cout << "Just replaced the default signal handler " << endl; } else if (sig == SIG_IGN) { cout << "Just replaced IGNORE " << endl; } else { cout << "Replaced a custom signal handler" << endl; } return; } int main() { sighandler_t sig; cout << "Using SIGUSR1 which is " << SIGUSR1 << endl; cout << "This is described as " << strsignal(SIGUSR1) << endl; // HitMe(); cout << endl; cout << "Using the custom signal handler " << endl; sig = signal(SIGUSR1, USR1Handler); SignalReport(sig); HitMe(); cout << "Setting the signal handler to ignore " << endl; sig = signal(SIGUSR1, SIG_IGN); SignalReport(sig); HitMe(); /* cout << "Seting the signal handler to default " << endl; sig = signal(SIGUSR1, SIG_DFL); SignalReport(sig); HitMe(); */ cout << "Using the custom signal handler " << endl; sig = signal(SIGUSR1, USR1Handler); SignalReport(sig); HitMe(); HitMe(); return 0; }