Linux编程基础之信号

   信号是一种最为古老的通信方式,类似生活中的电报,以简单快捷的方式,将较小信息量的信号发送至相应的进程,且不像管道需要事先建立连接关系,并且能让对方及时作出反应。可以说信号是软件层次上对硬件中断机制的模拟,其实操作系统中有很多东西都是在它基础上实现的,例如敲击键盘,强制中断,关机命令等过程都有信号的功劳。

  如下图是信号相关知识的小结,

Linux编程基础之信号_第1张图片

代码示例:signal.c

 1 #include <assert.h>
2 #include <ctype.h>
3 #include <errno.h>
4 #include <limits.h>
5 #include <string.h>
6 #include <stdarg.h>
7 #include <stdlib.h>
8 #include <stdio.h>
9
10 #include <signal.h>
11 #include <unistd.h>
12
13 /***********************************************************
14 功能说明:信号处理示例
15 author: [email protected]
16
17 ***********************************************************/
18 void my_func(int signo);
19
20 int main(int argc, char * argv[])
21 {
22
23 printf("pause for SIGINT or SIGQUIT\n");
24
25 alarm(5);//设置一个闹钟时间
26
27 //注册信号处理
28 signal(SIGINT,my_func);
29 signal(SIGQUIT,my_func);
30 signal(SIGALRM,my_func);
31
32 pause();//使当前进程等待,直到有信号产生。
33
34 }
35 /**********************************************************
36
37 方法功能:自定义的信号处理函数
38
39 **********************************************************/
40 void my_func(int signo)
41 {
42 //定义不同信号的处理过程
43 if(signo==SIGINT)
44 {
45 printf("i catch SIGINT\n");
46
47 }else if(signo==SIGQUIT)
48 {
49 printf("i catch SIGQUIT\n");
50
51 }else if(signo==SIGALRM)
52 {
53 printf("i catch ALARM\n");
54
55 }
56 exit(0);
57
58
59
60
61
62 }


运行结果:

运行后若不进行其它操作,五秒后会产生SIGALRM信号,结果如下:

运行后按Ctrl-C后,结果如下:

 

 

你可能感兴趣的:(linux)