【信号】信号捕捉之signal

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hello_ape/article/details/88890769

首先明确信号是一种软中断。在操作系统中,当产生了一个信号,内核有三种方式处理该信号。

1、执行默认操作。对于大部分的信号,系统默认操作都是终止进程。

2、丢弃。意味着信号虽然产生,但是被内核丢弃,没有递送给进程。

3、捕捉。内核将调用用户处理函数(捕捉函数)。

下面讲讲信号捕捉。最简单的是signal函数,函数原型如下:

typedef void (*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler);

函数要求两个参数,第一个是整型,指某个信号量,第二个参数是函数指针。函数指针指向的函数返回值为空,形参为整型。

如果希望内核忽略信号,则第二个参数设置为SIG_IGN。

如果希望执行默认操作,第二个参数设置为SIG_DFL。

如果我们希望能够自己处理信号,则将第二个参数指向我们的函数。

下面为测试代码

#include "apue.h"

typedef void Sigfun(int);

void sig_usr(int signo){
	if(signo == SIGUSR1)
		printf("receive SIGUSR1\n");
}

int 
main(int argc,char **argv)
{

	if(signal(SIGUSR1,sig_usr) == SIG_ERR)
		perror("signal error");

	while(1);
	return 0;
}

程序将一直循环等待信号的发生。

现在发送信号给进程

进程收到信号,执行捕捉函数,结果如下

猜你喜欢

转载自blog.csdn.net/hello_ape/article/details/88890769