当前位置:网站首页>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外键在数据库中的作用
- tensorflow实现线性方程的参数调整
- Numpy常用操作博客合集
- 【VIBE: Video Inference for Human Body Pose and Shape Estimation】论文阅读
- 如何在gazebo进行 joint的转动控制
- Tensorflow realize parameter adjustment of linear equations
- Since I use the HiFlow scene connector, I don't have to worry about becoming a "dropper" anymore
- 关于anaconda中conda下载包或者pip下载包很慢的原因,加速下载包的方法(无视anaconda版本和环境)
- 自从我使用HiFlow场景连接器后,在也不用担心成为“落汤鸡”了
猜你喜欢
随机推荐
性能测试(03)-JDBC Request
verbose np.matmul/np.dot/np.multiply/tf.matmul/tf.multiply/*
kubernetes中不可见的OOM
PTA 换硬币
信息系统项目的十大管理
The torch. The stack () official explanation, explanation and example
torch.stack()的官方解释,详解以及例子
WebSocket
基于STM32F103移植FreeRTOS
最长回文子串
Quartz的理解
激光条纹中心提取——灰度重心法
Mysql多表查询
Julia资料收集
ThreadLocal及其内存泄露分析
Antdv+Asp.net WebApi开发学生信息管理系统(一)
综述文章的写法
1007 Maximum Subsequence Sum (25分)
torch.cat()函数的官方解释,详解以及例子
Julia常见符号意思