linux信号中断学习

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <signal.h>
 4 
 5 int flag;
 6 
 7 void fun(int signo) {
 8         if (SIGINT == signo) {
 9                 printf("got SIGINT\n");
10                 flag++;
11         }
12 
13         if (SIGQUIT == signo) {
14                 printf("got SIGQUIT\n");
15                 flag++;
16         }
17         sleep(2);
18 }
19 
20 int main() {
21         flag = 0;
22         printf("start catching signal...\n");
23         signal(SIGINT, fun);
24         signal(SIGQUIT, fun);
25         while(1) {
26                 if (flag == 3) break;
27                 printf("waiting for signal\n");
28         }
29         printf("end catching signal.\n");
30 }

  在上面的程序中,首先使用signal注册了两个信号的处理,分别是ctrl+c 和ctrl+\,在通常情况下,进程接受这个两个信号导致进程退出,这里只是输出一行相应的文本来表示接受到了信号。从程序的运行可以看出,当进程在运行时收到了信号,会产生一个软中断,此时会跳转到对应的信号处理函数(或者是系统默认的处理方式),然后再跳转回之前指令地址运行。

posted @ 2013-12-27 10:32  xpray  阅读(722)  评论(0编辑  收藏  举报