#include #include #include #include sig_atomic_t abort_program = 0; void signal_handler(int sig) { abort_program = 1; printf("signal handled in: %lx\n", pthread_self()); } int main(void) { int err; struct sigaction action; sigset_t mask; printf("main thread: %lx\n", pthread_self()); err = mlockall(MCL_CURRENT | MCL_FUTURE); printf("mlockall returned %d\n", err); action.sa_handler = signal_handler; sigemptyset(&action.sa_mask); action.sa_flags = 0; err = sigaction(SIGINT, &action, NULL); printf("sigaction returned %d\n", err); sigemptyset(&mask); sigaddset(&mask, SIGINT); err = pthread_sigmask(SIG_BLOCK, &mask, NULL); printf("pthread_sigmask returned %d\n", err); while(!abort_program) {} printf("end of main\n"); return 0; }