Linux学习之系统编程篇:与信号捕捉有关的函数(signal / sigaction)
一、signal 函数
(1)原型:
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
(2)参数:
参数 1:捕捉指定的信号
参数 2:函数指针(因此需要写回调函数)
(3)回调函数:(作用:信号被捕捉后,要执行什么操作)
原型:void func(int num);
注意:只有当信号产生并捕捉后才调用
signal 函数虽然简单,但在 UNIX 不同版本中的行为可能不一样,所以,建议使用 sigaction 函数。
二、sigaction 函数
(1)函数原型:
int sigaction(int signum, const struct sigaction *act,struct sigaction *oldact);
(2)参数:
参数 1:需要捕捉的信号
参数 2:怎么去捕捉(在结构体中作设置);
参数 3:上次捕捉的相关信息,一般传 NULL
参数 2 结构体详情如下:
struct sigaction //函数调用时候传入地址
{void (*sa_handler)(int); // 跟 signal 函数指针用法相同sigset_t sa_mask; // 在信号处理过程中(从捕捉到回调函数执行完毕)临时屏蔽的信号集,在信号处理结束后,屏蔽信号继续执行,如果没有特别需求,先定义,再进行清空操作。int sa_flags; // 固定写 0 这样可以与第一个参数(函数指针)相配套};
(3)捕捉的一般流程:
struct sigaction act; // 设置参数 2 :结构体
act. sa_flags =0;
act. sa_handler = func; // 设置回调函数指针
sigemptyset(&act. sa_mask); // 置空临时屏蔽信号
// sigaddset(&act.sa_mask, signum1); // 临时屏蔽 signum1, 不需要屏蔽的话忽略此句
sigaction(signum2, &act, NULL); // 捕捉 signum2
Linux学习之系统编程篇:与信号捕捉有关的函数(signal / sigaction)相关推荐
- Linux学习之系统编程篇:信号的基本概念
一.信号的特点 (1)简单. (2)携带信息量少 . (3)使用在某个特定的场景中(事先约定好). (4)优先级最高. 不建议使用信号进行进程通信因为优先级高会打破原程序的执行过程:能携带的数据过少. ...
- Linux学习之系统编程篇:条件变量(pthread_cond_init / wait / signal / broadcast / destroy)
一.条件变量的认识 (1)条件变量的引出: 各个线程访问共享资源,比如说共享资源是一个空资源,那么,各线程的访问其实都是无效访问,因此需要一个机制,首先阻塞线程,以免其错误访问,待条件满足时(比如 共 ...
- Linux学习之系统编程篇:单个线程的退出函数
能否用 exit 来退出某个线程,exit 是用来退出进程的,因为父子线程共享同一地址空间,如果在某线程中使用,会使 所有线程全退出,因此需要使用别的函数 :pthread_exit (注意:子线程使 ...
- Linux学习之系统编程篇:与信号集有关的函数
一.自定义信号集 (1)类型:sigset_t (本质是位图) (2)设置自定义信号集方法: sigset_t set; //创建一个自定义信号集sigemptyset(&set); //创建 ...
- Linux学习之系统编程篇:编写一个守护进程
需求:写一个守护进程,每隔 2s 获取一次系统时间,将这个时间写入到磁盘文件 #include <stdio.h> #include <stdlib.h> #include & ...
- Linux学习之系统编程篇:利用 SIGCHLD 回收子进程
子进程死亡会给父进程发送 SIGCHLD 信号!(默认动作:父进程忽略该信号)此时父进程就可以捕捉该信号,利用回调函数使用 waitpid 回收子进程. #include <stdio.h> ...
- Linux学习之系统编程篇:进程回收(wait / waitpid)
一.wait wait 函数 :阻塞函数,使进程一直处于等待状态,直至进程死亡. (1)头文件: #include <sys/types.h> #include <sys/wait. ...
- Linux学习之系统编程篇:与产生信号有关的函数
一.kill kill : 给指定的进程法信号. (1)头文件: #include <sys/types.h>#include <signal.h> (2)函数原型: int ...
- Linux学习之系统编程篇: 阻塞信号集、未决信号集、自定义信号集
阻塞信号集和未决信号集在内核 PCB 中,因此我们无法操作,但是可以操作自定义信号集,然后将其通过函数映射给阻塞信号集来间接操作. 信号集本质:位图(1-31 号)
最新文章
- 知识图谱实体链接是什么?一份“由浅入深”的综述
- 把tensor转为numpy_如何在TensorFlow中将张量转换为numpy数组?
- 反向传播(Back propagation)算法推导具体过程
- Promise第三篇:async和await关键字
- mysql 性能状态_MySQL获取系统性能和状态_MySQL
- 左侧侧拉栏html,html – 将侧边栏拉伸到页面的完整高度
- linux服务器知识学习:linux系统的目录结构
- 机器视觉实验二:道路车流量计数实验(OpenCV-python代码)
- GAMP PPP部分学习与流程解析
- Python:混合动力汽车能量管理_动态规划简版(1/2)
- 个人读研期间常用小工具分享
- LightOJ-1336
- 2021黑金牛气冲天新年快乐通用PPT模板
- 解决微软Edge浏览器和IE浏览器下载无反应的问题
- legacy启动和UEFI启动
- ROS TF2静态坐标发布
- 中华名将索引 - 第一批:卫青
- iOS 9人机界面指南(一):UI设计基础
- DevOps基础-1.2-DevOps的CAMS价值体系
- 宜人贷PaaS 数据服务平台简介(上篇)
热门文章
- 从三大顶会论文看百变Self-Attention
- “让Keras更酷一些!”:层与模型的重用技巧
- 开源代码上新!6 份最新「Paper + Code」 | PaperDaily #17
- 【天池赛事】零基础入门语义分割-地表建筑物识别 Task4:评价函数与损失函数
- 全局统一返回结果包装信息
- python 化学结构_PyOrganic
- 使用swagger编写开发接口文档
- JavaScript——易班优课YOOC课群在线测试自动答题解决方案(十六)利用PC端和移动端BUG
- Inscribed Figures
- java的格式化时间工具类