进程间信号的接收和处理 ------ sigaction 的使用
进程 处理 信号 接收 ------ 使用
2023-09-11 14:19:53 时间
linux内核会发射一些信号,应用程序可以捕捉信号执行特定函数
int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); 成功:0;失败:-1,设置errno
act:传入参数,新的处理方式。oldact:传出参数,旧的处理方式。
struct sigaction结构体 struct sigaction { void(*sa_handler)(int);
sigset_t sa_mask; int sa_flags; };
① sa_handler:指定信号捕捉后的处理函数名(即注册函数)。也可赋值为SIG_IGN表忽略 或 SIG_DFL表执行默认动作
② sa_mask: 调用信号回调函数时,所要屏蔽的信号集合(信号屏蔽字)。注意:仅在处理函数被调用期间屏蔽生效,是临时性设置。用sigaddset函数添加需要被屏蔽的信号。
③ sa_flags:通常设置为0,表使用默认属性:为0的时候,可以屏蔽正在处理的信号(若在处理2号信号时又有2号信号,则此时传来的2号信号会被屏蔽)。
#include <stdlib.h> #include <stdio.h> #include <signal.h> void func(int signal) { printf("%d号信号被捕捉。\n", signal); } int main(void) { struct sigaction act, oldact; act.sa_handler = func; act.sa_flags = 0; sigemptyset(&act.sa_mask);//sa_mask是一个临时信号集,将其清零(初始化I) sigaddset(&act.sa_mask, SIGQUIT);//将3号信号添加到信号集,即:3号信号就是我们在处理2号信号的时候需要屏蔽的那个信号,也可以添加其他信号,比如20号信号 sigaddset(&act.sa_mask, SIGTSTP); int s_ret = sigaction(SIGINT, &act, &oldact); if (0>s_ret) { perror("sigaction error"); exit(1); } while (1); return 0; }
相关文章
- [Rootkit] 傀儡进程
- [Windows 驱动开发] 隐藏进程内存
- PHP多进程、PHP协程
- 47Linux - 系统管理(动态显示进程:top)
- python 分布式进程
- Flink taskmanager因节点宕机失效或进程异常导致的报警处理
- C#实现查找指定端口被哪个进程占用并处理进程及dos命令下操作
- Linux进程管理
- 《大数据存储:MongoDB实战指南》一1.8 几个重要的进程介绍
- Perl处理和收走子进程(退出状态码和wait)
- 浏览器工作原理:浅析浏览器渲染进程 - HTML、CSS和JavaScript是如何变成页面的?(下)
- linux一行命令查杀进程
- Windows 有没有办法查看文件被哪个进程占用
- C#获取运行程序的进程ID
- CEF3开发者系列之进程间消息传递