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+\,在通常情况下,进程接受这个两个信号导致进程退出,这里只是输出一行相应的文本来表示接受到了信号。从程序的运行可以看出,当进程在运行时收到了信号,会产生一个软中断,此时会跳转到对应的信号处理函数(或者是系统默认的处理方式),然后再跳转回之前指令地址运行。