测试信号屏蔽与解除并递达
1 #include<stdio.h>
2 #include<signal.h>
3 #include<unistd.h>
4 #include<stdlib.h>
5
6 void showpending(sigset_t *pending)
7 {
8 int i = 1;
9 for(;i <= 31;i++){
10 if(sigismember(pending,i)){
11 printf("1");
12 }else{
13 printf("0");
14 }
15 }
16 printf("\n");
17 }
18
19 void handler(int sig)
20 {
21 printf("get a sig: %d\n",sig);
22
23 }
24
25
26 int main ()
27 {
28 sigset_t blockSet,oblockSet,pending;
29 sigemptyset(&blockSet);
30 sigemptyset(&oblockSet);
31 sigaddset(&blockSet,2);
32
33 signal(2,handler);
34 sigprocmask(SIG_SETMASK,&blockSet,&oblockSet);
35 int count = 0;
36 while(1){
37 sigpending(&pending);
38 showpending(&pending);
39 sleep(1);
40 if(count++ == 10){
41 printf("recover proc block set!\n");
42 sigprocmask(SIG_SETMASK,&oblockSet,NULL);
43 }
44 }
45
46
47 }
2 #include<signal.h>
3 #include<unistd.h>
4 #include<stdlib.h>
5
6 void showpending(sigset_t *pending)
7 {
8 int i = 1;
9 for(;i <= 31;i++){
10 if(sigismember(pending,i)){
11 printf("1");
12 }else{
13 printf("0");
14 }
15 }
16 printf("\n");
17 }
18
19 void handler(int sig)
20 {
21 printf("get a sig: %d\n",sig);
22
23 }
24
25
26 int main ()
27 {
28 sigset_t blockSet,oblockSet,pending;
29 sigemptyset(&blockSet);
30 sigemptyset(&oblockSet);
31 sigaddset(&blockSet,2);
32
33 signal(2,handler);
34 sigprocmask(SIG_SETMASK,&blockSet,&oblockSet);
35 int count = 0;
36 while(1){
37 sigpending(&pending);
38 showpending(&pending);
39 sleep(1);
40 if(count++ == 10){
41 printf("recover proc block set!\n");
42 sigprocmask(SIG_SETMASK,&oblockSet,NULL);
43 }
44 }
45
46
47 }