1. 信号
信号(signal)是一种通知进程已经发生某种事件的机制。例如,在终端输入Ctrl+C中断正在运行的进程,则就会触发SIGINT的信号发送给该进程。进程如何处理信号有三种选择。
1)忽略该信号。有些信号表示硬件异常,例如,除以0或访问进程地址空间以外的单元等,因为这些异常产生的后果不确定,所以不推荐使用这种处理方式。
2)按系统默认处理方式。
3)提供一个函数,信号发生时调用这个函数,成为捕捉该信号。以实现按用户自定义的方式来处理信号。
2. SIGINT信号
SIGINT信号是针对于中断键(Ctrl + C)执行的信号,当程序正在运行,然后键入中断键,则执行此程序的进程就会终止。产生这种结果的原因是,对于此信号(SIGINT) 的系统默认动作是终止进程。该进程没有告诉系统内核对此信号作何种处理,所以系统按默认方式终止该进程。
3. signal函数
通过调用signal函数可以使得程序能够捕捉到此信号,指定发生SIGINT信号时要调用的函数名即可,函数由用户自己定义。
复制代码
1
2#include<signal.h> void (*signal(int signo, void (*func)(int)))(int); //返回以前的信号处理配置
4. 代码示例
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29static int temp = 0; void fun() { if(1 == temp++) //第二次捕捉到SIGINT信号,打印"exit succeed!"并退出 { printf("exit succeed!n"); exit(0); } else //第一次捕捉到SIGINT信号,打印"hello world" { printf("hello world!n"); } } int main() { signal(SIGINT,fun); //处理SIGINT信号为fun while(1) { sleep(2); printf("hello human!n"); //循环打印 } return 0; }
最后
以上就是贤惠电源最近收集整理的关于signal函数——自定义信号处理方式的全部内容,更多相关signal函数——自定义信号处理方式内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复