关于我 首页

系统编程:信号(2)

2019-06-10

这篇博文只是记录我信号的一点笔记,并不详细也不权威,建议阅读《Linux/Unix系统编程手册》

上一篇:系统编程:信号(1)


上一篇中说到了信号的基本概念,这篇记录一下信号处理函数。

我们已经知道进程接受到一个信号,会有默认的行为,比如SIGINT SIGKILL对应的是终止进程。既然说是默认行为,那么是否可以改变默认行为呢?

答案是肯定的。Linux系统中提供了两种系统调用来改变信号的对应行为:signal() 和 sigaction()

这里以signal()调用来举例。关于这个函数的原型可以通过man 2 signal来查看,这里简单的说一下: signal函数接收两个参数:1需要处理的信号,2信号处理的函数。第二个参数也就是真正真正的自定义处理函数。文字不好说明,上一段代码就很清晰了:

#include <stdio.h>
#include <signal.h>

static void signalHandler(int sig){
    printf("接受到了信号:%d\n",sig);
}

int main() {
    signal(SIGINT,signalHandler);
    while (1){

    }
    return 0;
}

在这个例子中,通过signal(SIGINT,signalHandler);这一句我们将SIGINT信号交给signalHandler()来处理,而在signalHandler()中并没有什么终止进程,或者是别的什么处理,而是简单打印出信号的值。

这里我们可以推理出:当我们运行这个程序,然后通过CTRL + c向其发送SIGINT信号,只会打印出信号值,并不能终止信号。

实际来运行一下,正如我们猜想的一样:

signal