#include #include #include #include #include #include void some_signal_handler(int si_number, siginfo_t *siginfo, void *bits) { } int main(int argc,char *argv[]) { int r; struct itimerval it; sigset_t sigset; siginfo_t siginfo; #if 0 #define THE_SIGACTION some_signal_handler #else #define THE_SIGACTION NULL #endif #if 0 struct sigaction sa; memset(&sa,0,sizeof(sa)); sa.sa_handler = SIG_IGN; sa.sa_sigaction = THE_SIGACTION; sigaction(SIGALRM,&sa,NULL); memset(&sa,0,sizeof(sa)); sa.sa_handler = SIG_IGN; sa.sa_sigaction = THE_SIGACTION; sigaction(SIGWINCH,&sa,NULL); memset(&sa,0,sizeof(sa)); sa.sa_handler = SIG_IGN; sa.sa_sigaction = THE_SIGACTION; sigaction(SIGCHLD,&sa,NULL); memset(&sa,0,sizeof(sa)); sa.sa_handler = SIG_IGN; sa.sa_sigaction = THE_SIGACTION; sigaction(SIGHUP,&sa,NULL); #endif sigemptyset(&sigset); sigaddset(&sigset,SIGALRM); sigaddset(&sigset,SIGWINCH); sigaddset(&sigset,SIGCHLD); sigaddset(&sigset,SIGHUP); sigprocmask(SIG_BLOCK,&sigset,NULL); memset(&it,0,sizeof(it)); it.it_interval.tv_sec = 2; it.it_interval.tv_usec = 0; it.it_value.tv_sec = it.it_interval.tv_sec; it.it_value.tv_usec = it.it_interval.tv_usec; setitimer(ITIMER_REAL,&it,NULL); sigemptyset(&sigset); sigaddset(&sigset,SIGALRM); sigaddset(&sigset,SIGWINCH); sigaddset(&sigset,SIGCHLD); sigaddset(&sigset,SIGHUP); for (;;) { r = sigwaitinfo(&sigset,&siginfo); if (r > 0) printf("Received signal %u.\n",siginfo.si_signo); } exit(0); }