当前位置:网站首页>C语言中信号函数(signal)的使用
C语言中信号函数(signal)的使用
2022-08-09 11:03:00 【XV_】
先来简单谈谈C语言中的信号(signal)
首先,signal是C语言库中的函数,它实际上是软中断,也就是软件发出的终端,本质来说,类似于int n。
对于接收到该软中断信号的进程,就会停下手头的工作,转而去执行信号处理程序 signal handler。
对于这一点,是与硬件中断的方式类似的。与硬件中断类比学习会更容易!
因此,我们需要知道的是
- 有哪些可用的软中断:就像硬件的除法零中断、溢出中断、外设中断…
- 软中断处理程序有哪些:就像中断服务程序(位置信息在idt、ivt)
- 默认的软中断服务程序:系统启动的时候就初始化默认的中断服务程序
- 用户自定义软中断服务程序:操作系统可自定义中断服务程序
以及需要明白
- 中断何时被触发(触发条件)
- 谁发出的中断
- 谁接收的中断
以上,都是抽象层次的理解,我们缕一缕过程
- 进程x执行
- 进程x触发中断 --> 发出软中断
- 进程y接收到中断,进程x该干啥干啥
- 进程y停止当前的任务,转而执行中断服务程序
- 执行完成,进程y继续执行自己的程序
至于进程x和y,可以的
- 同一进程
- 两个进程
- 父进程与子进程
- 至于两个独立进程,先暂时不管,想做到这点至少得让二者能够通信
好,整体框架梳理好了,我们慢慢说。
有哪些信号
上面的参考链接给出了所有的信号,现在我们简单举例说明。
| Signal | Value | Description |
|---|---|---|
| SIGCHLD | 17 | Child status has changed (POSIX). Signal sent to parent process whenever one of its child processes terminates or stops.See the YoLinux.com Fork, exec, wait, waitpid tutorial |
SIGCHLD信号:父进程子进程
请看我的另一篇文章:信号量SIGCHLD的使用,如何让父进程得知子进程执行结束,如何让父进程区分多个子进程的结束
信号处理函数
参考:
[1] Signals in C language
[2] How to use signal handlers in C language?
信号处理函数有两类
- 系统自带的处理函数
- 用户自定义函数
与底层硬件中断是类似的,中断向量表是自带的,也允许用户自定义。
关于中断的默认处理以及自定义处理,链接也有了。
谁发出?谁接收?
- 发出者:操作系统,或者某进程
- 接收者:某进程
至于细节,取决于你使用了哪个信号。每个信号的发出和接收动作和对象,以及默认的处理函数,都是规定好了的。
如何执行?
这个不再提了…就那么几个套路,很容易。
需要特别说明的是,如果进程1接收其他进程的信号X,在进程1执行信号x处理函数之前,如果多个信号x都发给了进程1,那么,这些信号可能被合并,进程1只执行1次信号处理函数。这可能的原因很多,比如操作系统很忙…
下面这篇参考链接我还没有处理:
边栏推荐
猜你喜欢
随机推荐
MySQL查询性能优化七种武器之索引潜水
学长告诉我,大厂MySQL都是通过SSH连接的
∘(空心的点乘)的数学含义
日期工具类
为什么组合优先于继承
faster-rcnn中的RPN原理
MATLAB中如何把cftool拟合的函数输出到命令行(解决如何导出拟合后的曲线数据)
centos7.5 设置Mysql开机自启动
STM32启动方式及BootLoader
b站up主:空狐公子 --矩阵求导(分母布局)课程笔记
PoseNet: A Convolutional Network for Real-Time 6-DOF Camera Relocalization Paper Reading
二叉树 前序是根在前(根左右)中序(左根右)
kubernetes中不可见的OOM
STM32使用静态队列保存数据
Preparation for gold three silver four: how to successfully get an Ali offer (experience + interview questions + how to prepare)
一键完成物联网产品注册,快速体验在线调试设备
uni-app 自带的picker封装一个日期-时间选择器
激光条纹中心提取——灰度重心法
双向链表的各种操作
程序员的专属浪漫——用3D Engine 5分钟实现烟花绽放效果









