What is correct way to have single Signal Handler function for multiple Signals?
c, posix, signals
Solution
I can't see how you can straightforwardly set a single handler for all signals. However, you can get fairly close by using `sigfillset()` to generate a set containing all valid signal numbers, and then iterate over possible signal numbers using `sigismember()` to determine whether that number is in the set, and set a handler if so. OK, I can't see a method of determining what the maximum possible signal number is, so you might have to guess a suitable maximum value.
Problem
What is the best way in C on Linux for setting up a program that can handle multiple POSIX-signals with the same function? For example in my code I have a handler function that I want to generically call when ever a signal is caught to perform some actions: ``` /* Exit handler function called by sigaction */ void exitHandler( int sig, siginfo_t *siginfo, void *ignore ) { printf("*** Got %d signal from %d\n", siginfo->si_signo, siginfo->si_pid); loopCounter=0; return; } ``` I have set up two signals to catch by having individual sigaction calls for each signal: ``` /* Set exit handler function for SIGUSR1 , SIGINT (ctrl+c) */ struct sigaction act; act.sa_flags = SA_SIGINFO; act.sa_sigaction = exitHandler; sigaction( SIGUSR1, &act, 0 ); sigaction( SIGINT, &act, 0 ); ``` Is this the correct way to set up this type of handling? Is there any other way where I don't have to enumerate all the possible signal numbers?