信号的处理方式sigaction函数

Posted 阿龙亡命天涯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了信号的处理方式sigaction函数相关的知识,希望对你有一定的参考价值。

一个进程收到一个信号的时候,可以用如下方法进行处理:

  1. 执行系统默认动作
    对大多数信号来说,系统默认动作是用来终止该进程。
  2. 忽略此信号(丢弃)
    接收到此信号后没有任何动作。
  3. 执行自定义信号处理函数(捕获)
    用用户定义的信号处理函数处理该信号。

【注意】:SIGKILL 和 SIGSTOP 不能更改信号的处理方式,因为它们向用户提供了一种使进程终止的可靠方法。

sigaction函数



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

void func(int signo)

	printf("捕捉到信号 %d\\n",signo);


int main()

	int ret=-1;
	struct sigaction act;
	//使用旧的信号处理函数指针
	act.sa_handler=fun;
	//标志位默认 默认使用旧的信号处理函数指针
	act.as_flags=0;
	//信号注册
	ret=sigaction(SIGINT,&act,NULL);
	if(-1 == ret)
	
		perror("sigaction");
		return 1;
	
	printf("按下任意键退出,,,\\n");
	while(1)
	
		getchar();
	

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

void func1(int signo,siginfo_t* info,void* context)

	printf("捕捉到信号 %d\\n",signo);


int main()

	int ret=-1;
	struct sigaction act;
	//使用新的信号处理函数指针
	act.sa_handler=fun1;
	//标志指定使用新的处理函数指针
	act.sa_flags=SA_SIGINFO;
	//信号注册
	ret=sigaction(SIGINT,&act,NULL);
	if(-1 == ret)
	
		perror("sigaction");
		return 1;
	
	printf("按下任意键退出,,,\\n");
	while(1)
	
		getchar();
	

效果和上面一样

如果上传少量信息,用新的
不带信息,用旧的
尽量使用sigaction函数!!!

以上是关于信号的处理方式sigaction函数的主要内容,如果未能解决你的问题,请参考以下文章

linux之信号处理函数signal和sigaction

sigaction()函数

信号处理函数-sigaction() 为信号注册信号捕捉函数

signal() 和 sigaction()

Linux信号详解:signal与sigaction函数

Linux信号详解:signal与sigaction函数