#include #include #include #include #include static sigset_t sigset; static void signal_handler(int sig) { printf("Got it!\n"); } static void *wait_for_signal(void *whatever) { signal(SIGUSR1, signal_handler); sleep(5); printf("Unblocking now.\n"); pthread_sigmask(SIG_UNBLOCK, &sigset, NULL); sleep(1000); return NULL; } static void w4s_other_thread(void) { pthread_t thread; pthread_create(&thread, NULL, wait_for_signal, NULL); pthread_join(thread, NULL); } int main(int argc, char **argv) { sigemptyset(&sigset); sigaddset(&sigset, SIGUSR1); pthread_sigmask(SIG_BLOCK, &sigset, NULL); if(argc > 1) w4s_other_thread(); else wait_for_signal(NULL); return 0; }