Linux中signal()函数详解

来源:互联网 发布:debian 没有yum 编辑:程序博客网 时间:2024/06/05 07:24

signal()函数:
这里写图片描述
第一个参数是要捕捉的信号(查看信号:kill -l,9号SIGKILL信号不能被捕捉);
第二个参数表示我们要对信号进行的处理方式。
信号的处理方式一般有三种:
(1)忽略此信号(SIG_IGN):

#include<stdio.h>#include<signal.h>int main(){    signal(2,SIG_IGN);    while(1)    {        printf("2333\n");        sleep(1);    }    return 0;}

当执行程序时,陷入死循环,此时按下Ctrl+c进程并不会停止,因为我们对Ctrl+c产生的2号SIGINT信号采取了忽略处理,若要停止进程可用Ctrl+\(SIGQUIT);
(2)执行该信号的默认处理动作(SIG_DFL):

#include<stdio.h>#include<signal.h>int main(){    signal(2,SIG_DFL);    while(1)    {        printf("2333\n");        sleep(1);    }    return 0;}

当执行程序时,同样是死循环,此时按下Ctrl+c进程停止,因为我们对2号信号采取默认动作处理,系统默认2号信号终止进程。
(3提供一个信号处理函数,要求内核在处理该信号时切换到用户态执行这个处理函数,这种方式称为捕捉(catch)一个信号:

#include<stdio.h>#include<signal.h>void  handler(int signo)//自定义一个函数处理信号{    printf("catch a signal:%d\n:",signo);}int main(){    signal(2,handler);    while(1)    {        printf("1111\n");        sleep(1);    }    return 0;}

当执行程序时,按下Ctrl+c,进程并不会停止,而是去执行自定义的函数handler(),若要停止,按下Ctrl+\。运行结果如图:
这里写图片描述
linux系统中的信号:(1-31,34-64)
这里写图片描述

0 0
原创粉丝点击