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

信号博文

linux进程间通信信号

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

常用API

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

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

sigaction函数

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

包含的头文件
#include

函数原型:
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此参数和signal()

你可能感兴趣的:(linux,linux)