原文地址:http://blog.csdn.net/todd911/article/details/17319591
- #include <stdio.h>
- #include <signal.h>
- static void sig_int(int);
- int main(void){
- sigset_t newmask,oldmask,waitmask;
- printf("program start.\n");
- if(signal(SIGUSR1, sig_int) == SIG_ERR){
- perror("signal");
- return -1;
- }
- if(signal(SIGUSR2, sig_int) == SIG_ERR){
- perror("signal");
- return -1;
- }
- sigemptyset(&waitmask);
- sigaddset(&waitmask, SIGUSR1);
- sigemptyset(&newmask);
- sigaddset(&newmask, SIGUSR2);
- if(sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0){
- perror("sigprocmask");
- return -1;
- }
- printf("in critical region.\n");
- sigsuspend(&waitmask);
- if(sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0){
- perror("sigprocmask");
- return -1;
- }
- printf("program exit.\n");
- return 0;
- }
- static void sig_int(int signo){
- printf("int sig_int:%d.\n",signo);
- }