- 论坛徽章:
- 0
|
5 #include"apue.h"
6 static void sig_quit(int);
7
8 int main(void)
9 {
10 sigset_t newmask,oldmask,pendmask;
11
12 if(signal(SIGQUIT,sig_quit) == SIG_ERR)
13 err_sys("can't catch SIGQUIT");
14
15 sigemptyset(&newmask);
16 sigaddset(&newmask,SIGQUIT);
17
18 if(sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0)
19 err_sys("SIG_BLOCK error");
20
21 sleep(5);
22
23 if(sigpending(&pendmask) < 0)
24 err_sys("sigpending error");
25 if(sigismember(&pendmask, SIGQUIT))
26 printf("\nSIGQUIT pending\n");
27
28 if(sigprocmask(SIG_SETMASK, &oldmask, NULL) <0)
29 err_sys("SIG_SETMASK error");
30 printf("SIGQUIT unblocked\n");
31 sleep(5);
32 exit(0);
33 }
34 static void sig_quit(int signo)
35 {
36 printf("caught SIGQUIT\n");
37 if(signal(SIGQUIT, SIG_DFL) == SIG_ERR)
38 err_sys("can't reset SIGQUIT");
39 }
执行结果为什么是这样的,
$./a.out
^\ 产生信号一次(在5s之内)
SIGQUUIT pending
caught SIGQUIT
SIGQUIT unblocked
^\退出
为什么输出SIGQUUIT pending 与输出SIGQUIT unblocked 之间调用了一次信号处理程序呢,这个地方还没有给这个信号解开阻塞呢?为什么?求解 |
|