Linux:信号的捕获和处理(signal函数和sigaction函数)

信号的捕获和处理

(1)What(什么是信号的捕获和处理)

信号捕获:

在程序中,信号的捕获可以看做是注册动作,提前告诉系统当遇到某个信号时做什么处理(换句话说,就是将信号和信号处理函数进行一一映射的过程)

信号处理:

本质就是一个调用处理函数来处理信号

(2)Why(为什么要进行信号的捕获和处理操作)

Linux中每个信号都有默认的处理动作,如果想要忽略或修改某个信号的默认动作,就需要在程序中捕获该信号,然后调用处理函数进行信号处理

(3)How(如何实现信号的捕获和处理)

signal函数:

用于注册一个信号处理函数,当指定的信号发生时,会调用相应的处理函数来执行特定的操作。

#include <signal.h>
signal(int signum,  void(handfunc *)(int)); 
  • 参数signum:信号编号
  • 参数handfunc:信号处理函数

可以这样理解signal函数:它将信号和信号处理函数进行了映射,即就是说,当遇到signum信号时,会调用handfunc函数来处理该信号

sigaction函数

用于注册一个信号处理函数,当指定的信号发生时,会调用相应的处理函数来执行特定的操作。

#include <signal.h>
int sigaction(int signum, 
 			  const struct sigaction *act, 
 			  struct sigaction *oldact);
  • 参数signum:信号编号
  • 参数act:一个数据结构,里边包含信号处理函数
  • 参数oldact:一个数据结构,保持之前signum信号的信号处理信息

sigaction 函数相对于 signal 函数提供了更精细的控制和更多的选项,使得对信号处理的配置更加灵活和强大

sigaction结构体

struct sigaction
{
	void (*handfunc)(int signum); 
	void (*signaction)(int signum, siginfo_t *, void*); 
	sigset_t sa_mask; 
	int sa_flag; 
}
  • 参数sa_flag:为0时表示调用handfunc函数处理信号signum
  • 参数sa_mask:处理函数所屏蔽的信号
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值