先来简单谈谈C语言中的信号(signal)

首先,signal是C语言库中的函数,它实际上是软中断,也就是软件发出的终端,本质来说,类似于int n

对于接收到该软中断信号的进程,就会停下手头的工作,转而去执行信号处理程序 signal handler

对于这一点,是与硬件中断的方式类似的。与硬件中断类比学习会更容易!

因此,我们需要知道的是

  • 有哪些可用的软中断:就像硬件的除法零中断、溢出中断、外设中断…
  • 软中断处理程序有哪些:就像中断服务程序(位置信息在idt、ivt)
    • 默认的软中断服务程序:系统启动的时候就初始化默认的中断服务程序
    • 用户自定义软中断服务程序:操作系统可自定义中断服务程序

以及需要明白

  • 中断何时被触发(触发条件)
  • 谁发出的中断
  • 谁接收的中断

以上,都是抽象层次的理解,我们缕一缕过程

  1. 进程x执行
  2. 进程x触发中断 --> 发出软中断
  3. 进程y接收到中断,进程x该干啥干啥
  4. 进程y停止当前的任务,转而执行中断服务程序
  5. 执行完成,进程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)的使用相关推荐

  1. 31-【go】系统信号介绍、Go语言中使用os/signal包实现对信号的处理

    一.系统信号介绍 系统信号介绍_Agoni_xiao的博客-CSDN博客 二.Go语言中使用os/signal包实现对信号的处理 Go语言中os/signal包的学习与使用 - 人艰不拆_zmc - ...

  2. c语言中 允许函数重载么,简述C++语言支持函数重载问题介绍

    对于C++语言作为一种欲与C兼容的语言,C++语言保留了一部分过程式语言和特点,foo_int_int这样的名字包含了函数名.函数参数数量及类型信息,C++语言就是靠这种机制来实现函数重载的. 因而它 ...

  3. c++和c语言中的函数相互调用的问题

    1.如何C++程序要调用 已编译后的C函数,该怎么办? (1)假设某个C函数的声明如下: void foo(int x, int y); 该函数被C编译器编译后在库中的名字为_foo,而C++编译器则 ...

  4. c语言程序可以单独编译,c语言中的函数可不可以单独进行编译?_后端开发

    在C语言中,要求参加运算的数必须是整数的运算符是什么_后端开发 在C语言中要求参加运算的数必须是整数的运算符是"%":"%"符号在c语言中有两种释义,一是求余符 ...

  5. R开发(part8)--应用R语言中的函数环境空间

    学习笔记,仅供参考,有错必纠 文章目录 R开发 应用R语言中的函数环境空间 R语言的函数环境空间 封闭环境 绑定环境 运行环境 调用环境 函数环境空间图示 R开发 应用R语言中的函数环境空间 R语言的 ...

  6. C语言algorithm主函数,C语言中主函数中相关有关问题?

    C语言中主函数中相关问题??? #include #include #include #include #include #include #include #include #include usi ...

  7. python中可以使用变量来引用函数吗_如何在python语言中使用函数变量并调用函数...

    在python语言中,除了常规变量之外,还有函数变量.把函数本身赋值给变量,这个变量为函数变量. 工具/原料 python pycharm 截图工具 WPS 方法/步骤 1 在已新建的python文件 ...

  8. c语言中什么函数可以作为虚函数,C++语言中的“虚函数”就像C语言中的指针,必须要弄懂的...

    上一节较为详细的讨论了C++语言中基类被派生类继承过程中的内存模型,尤其较为详细的分析了虚函数及其虚表.虚表指针在内存中是如何分布,如何存储的,这对于理解C++语言中的"动态绑定" ...

  9. C语言中的函数(重点介绍自定义函数)

    C语言中的函数分为库函数和自定义函数,本篇重点介绍自定义函数中的函数调用 函数由一个或多个语句块组成,负责完成某项特定任务, 相较于其他代码,具有相对的独立性,一般会有返回值和输入参数,提供对过程的封 ...

最新文章

  1. c语言程序设计基础程序改错,c程序设计程序改错题_相关文章专题_写写帮文库...
  2. Nginx环境下PHP flush失效的解决方法
  3. 卡尔曼滤波MATLAB代码实现
  4. 火狐浏览器服务器意外响应,Firefox 火狐浏览器 83 发布,已修复任意代码执行漏洞...
  5. 树形结构:寻找共同祖先
  6. webstorm最新破解方法
  7. mysql报错 DuplicateKeyException分析与解决
  8. Vue优化策略_项目上线_02
  9. Springboot环境下mybatis配置多数据源配置
  10. html 去文本框中的双引号_前端·HTML基础
  11. MySQL学习笔记(七)使用AutoMySQLBackup工具自动备份MySQL数据库
  12. 以太坊是什么鬼?!媲美比特币的加密币大揭秘
  13. 14款CSS3图片层叠切换动画
  14. python遗传算法计算实例_python实现的遗传算法实例(一)
  15. 【C盘内存不足的解决方法】
  16. 浅谈工程总承包项目WBS的重要性与创建方法
  17. Facebook成为美国四大电视台争夺观众阵地
  18. 交叉表、行列转换和交叉查询经典
  19. Cover Letter常用范式和模版
  20. 深圳基因组所刘永鑫组招聘博士后3名(3年100万+文章奖励+项目绩效)

热门文章

  1. cocos2dx 3.x 蒙板 遮罩 点击圆功能
  2. Java动态代理模拟spring的AOP
  3. CSS Hack 汇总快查
  4. pHp中文网零基础,零基础编程
  5. from 下拉框多个值提交_Git commit 多行信息提交
  6. java抽象类异常_求教JAVA里面的错误继承抽象类我都已经看傻了。
  7. excel和python建模_利用Excel学习Python:准备篇
  8. 详解mysql数据库的启动与终止_详解MySQL数据库的启动与终止(一)
  9. 网页设计上机考试原题_Dreamweaver上机考试题目dreamweaver试题库网页制作试题.doc...
  10. MongoDB 数据类型查询——$type使用