signal函数的简单用法

1、函数原型理解

void (*signal(int sig,void(*func)(int)))(int);

指定使用sig指定的信号编号处理信号的方法。

简化上式 :

1)typdef void( *sighandler)(int);// 重命名一个函数指针

原型简化为---------> void(*signal(int sig,sighandler handler))(int);

2)将signal函数拎出来:void (*)(int);//这是一个函数指针

--------->sighandler signal(int sig,sighandler handler);

handler指定程序可以处理信号的三种方式之一:

默认处理(SIG_DFL):          信号由该特定信号的默认动作处理

忽略信号(SIG_IGN):      忽略信号,即使没有意义,代码执行仍然继续。

函数处理程序:                 定义一个特定的函数来处理信号

2、函数参数说明:

第一个参数是要捕捉的信号(查看信号:kill -l,9号SIGKILL信号不能被捕捉); 
第二个参数表示我们要对信号进行的处理方式。

1)忽略信号//如:忽略Ctrl+c信号

int main()
{
    signal(2,SIG_IGN);//忽略信号
    while(1)
    {
        printf("aaaaa");
        sleep(6);
    }
    return 0;
}

2) 默认动作

int main()
{
    signal(2,SIG_DFL);//默认处理信号
    while(1)
    {
        printf("aaaaa");
        sleep(6);
    }
    return 0;
}

3)自定义处理函数//捕捉到这个信号后,按照handler处理函数进行操作

#include<signal.h>
void  handler(int signo)
{
    printf("signal:%d\n:",signo);
}
int main()
{
    signal(2,handler);
    while(1)
    {
        printf("hello world\n");
        sleep(6);
    }
    return 0;
}
发布了100 篇原创文章 · 获赞 26 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/modi000/article/details/105386746
今日推荐