#include <errno.h> #include <stdio.h> #include <signal.h> #include <stdlib.h> static void abend (int sig) { printf ("Abended on signal %d\n", sig); exit (2); } int main (void) { struct sigaction sa; int i; int rc; for (i = 1; i <= 65; i++) { // Skip signals 32 and 33, since these are used by LinuxThreads. Some // glibc versions do not invoke the sigaction system call for these // signals. // skip signals 63 and 64: some systems say "warning, ignored attempt // to catch 32 because it's used internally by Valgrind", others say // "invalid argument". if (i == 32 || i == 33 || i == 63 || i == 64) { continue; } // different systems sa.sa_flags = 0; sigemptyset( &sa.sa_mask ); sa.sa_handler = abend; fprintf(stderr,"setting signal %d: ", i); rc = sigaction (i /*SIGKILL*/, &sa, NULL); if (rc) perror (""); else fprintf(stderr,"Success\n"); fprintf(stderr,"getting signal %d: ", i); rc = sigaction (i /*SIGKILL*/, NULL, &sa); if (rc) perror (""); else fprintf(stderr,"Success\n"); fprintf(stderr,"\n"); } return 0; }