
/* gcc -g -Wall int.c -lpthread -o int */

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <errno.h>
#include <pthread.h>
#include <string.h>
#include <unistd.h>

int
main(int argc, char **argv)
{
    int err;
    sigset_t set;
    int sig;

    printf("Program started, waiting for signal.\n");
    if (sigemptyset(&set)) {
        printf("sigemptyset failed: %s\n", strerror(errno));
        exit(1);
    }
    if (sigaddset(&set, SIGINT)) {
        printf("sigaddset for SIGINT failed: %s\n", strerror(errno));
        exit(1);
    }
    err = pthread_sigmask(SIG_BLOCK, &set, NULL);
    if (0 != err) {
        printf("pthread_sigmask failed: %s\n", strerror(err));
        exit(1);
    }
    do {
        sig = 0;
        err = sigwait(&set, &sig);
	printf("Wokeup, err = %d, sig = %d\n", err, sig);
    } while (EINTR == err);
    printf("Got signal %d, exiting.\n", sig);
    exit(0);
}
