概述
1. 信号
信号(signal)是一种通知进程已经发生某种事件的机制。例如,在终端输入Ctrl+C中断正在运行的进程,则就会触发SIGINT的信号发送给该进程。进程如何处理信号有三种选择。
1)忽略该信号。有些信号表示硬件异常,例如,除以0或访问进程地址空间以外的单元等,因为这些异常产生的后果不确定,所以不推荐使用这种处理方式。
2)按系统默认处理方式。
3)提供一个函数,信号发生时调用这个函数,成为捕捉该信号。以实现按用户自定义的方式来处理信号。
2. SIGINT信号
SIGINT信号是针对于中断键(Ctrl + C)执行的信号,当程序正在运行,然后键入中断键,则执行此程序的进程就会终止。产生这种结果的原因是,对于此信号(SIGINT) 的系统默认动作是终止进程。该进程没有告诉系统内核对此信号作何种处理,所以系统按默认方式终止该进程。
3. signal函数
通过调用signal函数可以使得程序能够捕捉到此信号,指定发生SIGINT信号时要调用的函数名即可,函数由用户自己定义。
#include<signal.h>
void (*signal(int signo, void (*func)(int)))(int); //返回以前的信号处理配置
4. 代码示例
static 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函数——自定义信号处理方式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复