C语言中信号函数(signal)的使用
先来简单谈谈C语言中的信号(signal)
首先,signal是C语言库中的函数,它实际上是软中断,也就是软件发出的终端,本质来说,类似于int n
。
对于接收到该软中断信号的进程,就会停下手头的工作,转而去执行信号处理程序 signal handler。
对于这一点,是与硬件中断的方式类似的。与硬件中断类比学习会更容易!
因此,我们需要知道的是
- 有哪些可用的软中断:就像硬件的除法零中断、溢出中断、外设中断…
- 软中断处理程序有哪些:就像中断服务程序(位置信息在idt、ivt)
- 默认的软中断服务程序:系统启动的时候就初始化默认的中断服务程序
- 用户自定义软中断服务程序:操作系统可自定义中断服务程序
以及需要明白
- 中断何时被触发(触发条件)
- 谁发出的中断
- 谁接收的中断
以上,都是抽象层次的理解,我们缕一缕过程
- 进程x执行
- 进程x触发中断 --> 发出软中断
- 进程y接收到中断,进程x该干啥干啥
- 进程y停止当前的任务,转而执行中断服务程序
- 执行完成,进程y继续执行自己的程序
至于进程x和y,可以的
- 同一进程
- 两个进程
- 父进程与子进程
- 至于两个独立进程,先暂时不管,想做到这点至少得让二者能够通信
好,整体框架梳理好了,我们慢慢说。
有哪些信号
All signals in c/c++
上面的参考链接给出了所有的信号,现在我们简单举例说明。
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次信号处理函数。这可能的原因很多,比如操作系统很忙…
下面这篇参考链接我还没有处理:
Handling multiple SIGCHLD
C语言中信号函数(signal)的使用相关推荐
- 31-【go】系统信号介绍、Go语言中使用os/signal包实现对信号的处理
一.系统信号介绍 系统信号介绍_Agoni_xiao的博客-CSDN博客 二.Go语言中使用os/signal包实现对信号的处理 Go语言中os/signal包的学习与使用 - 人艰不拆_zmc - ...
- c语言中 允许函数重载么,简述C++语言支持函数重载问题介绍
对于C++语言作为一种欲与C兼容的语言,C++语言保留了一部分过程式语言和特点,foo_int_int这样的名字包含了函数名.函数参数数量及类型信息,C++语言就是靠这种机制来实现函数重载的. 因而它 ...
- c++和c语言中的函数相互调用的问题
1.如何C++程序要调用 已编译后的C函数,该怎么办? (1)假设某个C函数的声明如下: void foo(int x, int y); 该函数被C编译器编译后在库中的名字为_foo,而C++编译器则 ...
- c语言程序可以单独编译,c语言中的函数可不可以单独进行编译?_后端开发
在C语言中,要求参加运算的数必须是整数的运算符是什么_后端开发 在C语言中要求参加运算的数必须是整数的运算符是"%":"%"符号在c语言中有两种释义,一是求余符 ...
- R开发(part8)--应用R语言中的函数环境空间
学习笔记,仅供参考,有错必纠 文章目录 R开发 应用R语言中的函数环境空间 R语言的函数环境空间 封闭环境 绑定环境 运行环境 调用环境 函数环境空间图示 R开发 应用R语言中的函数环境空间 R语言的 ...
- C语言algorithm主函数,C语言中主函数中相关有关问题?
C语言中主函数中相关问题??? #include #include #include #include #include #include #include #include #include usi ...
- python中可以使用变量来引用函数吗_如何在python语言中使用函数变量并调用函数...
在python语言中,除了常规变量之外,还有函数变量.把函数本身赋值给变量,这个变量为函数变量. 工具/原料 python pycharm 截图工具 WPS 方法/步骤 1 在已新建的python文件 ...
- c语言中什么函数可以作为虚函数,C++语言中的“虚函数”就像C语言中的指针,必须要弄懂的...
上一节较为详细的讨论了C++语言中基类被派生类继承过程中的内存模型,尤其较为详细的分析了虚函数及其虚表.虚表指针在内存中是如何分布,如何存储的,这对于理解C++语言中的"动态绑定" ...
- C语言中的函数(重点介绍自定义函数)
C语言中的函数分为库函数和自定义函数,本篇重点介绍自定义函数中的函数调用 函数由一个或多个语句块组成,负责完成某项特定任务, 相较于其他代码,具有相对的独立性,一般会有返回值和输入参数,提供对过程的封 ...
最新文章
- c语言程序设计基础程序改错,c程序设计程序改错题_相关文章专题_写写帮文库...
- Nginx环境下PHP flush失效的解决方法
- 卡尔曼滤波MATLAB代码实现
- 火狐浏览器服务器意外响应,Firefox 火狐浏览器 83 发布,已修复任意代码执行漏洞...
- 树形结构:寻找共同祖先
- webstorm最新破解方法
- mysql报错 DuplicateKeyException分析与解决
- Vue优化策略_项目上线_02
- Springboot环境下mybatis配置多数据源配置
- html 去文本框中的双引号_前端·HTML基础
- MySQL学习笔记(七)使用AutoMySQLBackup工具自动备份MySQL数据库
- 以太坊是什么鬼?!媲美比特币的加密币大揭秘
- 14款CSS3图片层叠切换动画
- python遗传算法计算实例_python实现的遗传算法实例(一)
- 【C盘内存不足的解决方法】
- 浅谈工程总承包项目WBS的重要性与创建方法
- Facebook成为美国四大电视台争夺观众阵地
- 交叉表、行列转换和交叉查询经典
- Cover Letter常用范式和模版
- 深圳基因组所刘永鑫组招聘博士后3名(3年100万+文章奖励+项目绩效)
热门文章
- cocos2dx 3.x 蒙板 遮罩 点击圆功能
- Java动态代理模拟spring的AOP
- CSS Hack 汇总快查
- pHp中文网零基础,零基础编程
- from 下拉框多个值提交_Git commit 多行信息提交
- java抽象类异常_求教JAVA里面的错误继承抽象类我都已经看傻了。
- excel和python建模_利用Excel学习Python:准备篇
- 详解mysql数据库的启动与终止_详解MySQL数据库的启动与终止(一)
- 网页设计上机考试原题_Dreamweaver上机考试题目dreamweaver试题库网页制作试题.doc...
- MongoDB 数据类型查询——$type使用