#include #include #include #include int main(void) { int err = 0; bool bShutdown = 0; sigset_t set, old; sigfillset(&set); sigdelset(&set,SIGTRAP); // sigdelset(&set, SIGINT ); // // Needed by gdb // sigdelset(&set, SIGUSR1 ); sigdelset(&set, SIGUSR2 ); sigdelset(&set, SIGUNUSED ); /* Java VM uses these signals in Linux */ for(int s=SIGRTMIN; s <= SIGRTMAX - 4; s++) sigdelset(&set,s); if (pthread_sigmask(SIG_BLOCK, &set, 0) != 0) fprintf(stderr, "pthread_sigprocmask failed: %s\n", strerror(errno)); // // Start additional threads // while (bShutdown == false) { int sig = 0; siginfo_t info; if ((sig = sigwaitinfo(&set, &info)) == -1) { fprintf(stderr, "Received invalid signal -1.\n"); continue; } switch (sig) { case SIGINT: fprintf(stderr, "Received SIGINT\n"); // fall through case SIGTERM: fprintf(stderr, "Got SIGINT/SIGTERM signal, shutting down\n"); bShutdown = true; break; default: fprintf(stderr, "Ignoring the unexpected signal, %d\n", sig); break; } } // // Do additional cleanup // return 0; }