linux进程间通信信号(二)(sigaction、sigqueue)

本文详细介绍了Linux进程间通信中两个重要的信号处理函数:sigaction和sigqueue。sigaction用于注册信号处理函数,支持更复杂的信号处理行为,如设置信号处理的重置选项和阻塞策略。sigqueue则是信号发送的高级版,能够携带额外数据并支持信号排队,需要配合SA_SIGINFO标志使用。通过示例代码和实验结果,展示了这两个函数的使用方法和效果。
摘要由CSDN通过智能技术生成

信号博文

linux进程间通信信号

本文重点是讲解:sigactionsigqueue两个函数,分别用于信号处理函数的注册、信号处理发送函数是signal和kill的升级版。

常用API

信号处理函数的注册
入门版:函数signal
高级版:函数sigaction

信号处理发送函数
1.入门版:kill
2.高级版:sigqueue
对于入门版的信号处理API的重点在于动作,但kill 函数发送的信号是无法携带数据。
对于高级版的信号处理API的重点信号携带的信息

sigaction函数

sigaction 是一个系统调用,可以用来查询或设置信号处理方式。

包含的头文件
#include<signal.h>

函数原型:
int sigaction(int signum,const struct sigaction *act ,struct sigaction *oldact);

signum:参数指出要捕获的信号类型。
act:参数指定新的信号处理方式,struct sigaction类型如果不为空说明需要对该信号有新的配置。
oldact:备份,如果不为空,那么可以对之前的信号配置进行备份,以方便之后进行恢复。

struct sigaction结构体介绍

struct sigaction {
   
   void (*sa_handler)(int); //信号处理程序,不接受额外数据,SIG_IGN 为忽略,SIG_DFL 为默认动作
   void (*sa_sigaction)(int, siginfo_t *, void *); //信号处理程序,能够接受额外数据和sigqueue配合使用
   sigset_t sa_mask;//阻塞关键字的信号集,可以再调用捕捉函数之前,把信号添加到信号阻塞字,信号捕捉函数返回之前恢复为原先的值。
   int sa_flags;//影响信号的行为SA_SIGINFO表示能够接受数据
 };
//回调函数句柄sa_handler、sa_sigaction只能任选其一

sa_handler

sa_handler

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值