0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux信号事件发生的两个来源

FPGA之家 ? 来源:嵌入式软件开发交流 ? 作者:young ? 2021-06-18 15:09 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

什么是信号

信号可以理解为软件中断,是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是差不多的。信号是异步的,一个进程不必通过任何操作来等待信号的到达。信号可以直接进行用户空间进程和内核进程之间的交互,内核进程也可以利用它来通知用户空间进程发生了哪些系统事件。

谁来产生信号

信号事件的发生有两个来源:

(1) 硬件来源,比如我们按下ctrl+c,会产生SIGINT信号。

(2) 软件来源,比如我们调用alarm函数来产生SIGALRM信号。

常用信号

Linux信号的编号是从1-64,其中32和33空缺,没有对应的信号。通过kill -l 可查看所有的信号。

1~31之间的信号叫做不可靠信号, 信号可能会丢失, 也叫做非实时信号。

34~64之间的信号叫做可靠信号, 信号不会丢失, 也叫做实时信号。

信号响应方式

信号有如下三种响应方式:

(1) 忽略信号,即对信号不做任何处理,但是有两个信号不能忽略,即 SIGKILL 及 SIGSTOP。

(2) 捕捉信号,定义信号处理函数,当信号发生时,执行相应的自定义处理函数。

(3) 执行缺省操作,Linux 对每种信号都规定了默认操作。

信号处理过程

信号处理的大致流程如下:

信号产生 -》 信号注册 -》 信号在进程中注销 -》 信号处理函数执行完毕

我们主要讲一下“信号注册” 和“信号在进程中注销”。其他两个都比较好理解。

信号注册指的是在目标进程中注册,该目标进程中有未决信号的信息。啥叫未决信号呢,实际执行信号的处理动作称为信号递达,信号从产生到递达之间的状态,称为信号未决。

先来看一下对应的结构体:

struct sigpending{ //未决信号链的头部与尾部 struct sigqueue *head, *tail; //未决信号集 sigset_t signal;};

struct sigqueue{ struct sigqueue *next; //信号所携带的信息 siginfo_t info;}

信号注册的过程就是将信号值加入到未决信号集siginfo_t中,将信号所携带的信息加入到未决信号链的某一个sigqueue中去。

因此,对于可靠的信号,可能存在多个未决信号的sigqueue结构,对于每次信号到来都会注册。而不可靠信号只注册一次,只有一个sigqueue结构。

只要信号在进程的未决信号集中,表明进程已经知道这些信号了,还没来得及处理,或者是这些信号被阻塞。

信号在进程中注销是指进程已经接收到信号了,会在链表中移除。在进程的执行过程中,每次从系统调用或中断返回用户空间的时候,都会检查是否有信号没有被处理。如果这些信号没有被阻塞,那么就调用相应的信号处理函数来处理这些信号。可靠信号和不可靠信号的处理有所不同:

不可靠信号:由于不可靠信号在未决信号链中只有一个sigqueue结构,因此将它删除的同时,也会将信号从未决信号集中删除。

可靠信号:由于可靠信号在未决信号链中可能有多个sigqueue结构,如果只有一个,也将信号从未决信号集中删除掉。如果有多个则不从未决信号集中删除信号,注销完毕。

原文标题:Linux信号及工作原理

文章出处:【微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11522

    浏览量

    214382
  • 信号
    +关注

    关注

    11

    文章

    2856

    浏览量

    78456

原文标题:Linux信号及工作原理

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    当CY7C65215在两个通道上配置为 SPI 和 I2C 时,能否在Linux系统中看到两个设备?

    我的客户想知道,当 CY7C65215 在两个通道上配置为 SPI 和 I2C 时,他能否在 Linux 系统中看到两个设备。
    发表于 05-26 06:27

    ADS1198有两个时钟,CLK和SCLK,这两个时钟信号能接在一起吗?

    最近在做这块芯片,看到有两个时钟,CLK和SCLK,这两个时钟信号能接在一起吗,就是说CLK和SLCK能不能使用同一时钟信号?另外,关于
    发表于 02-07 06:28

    两个晶体管能如何实现高效正弦波振荡?

    在电子设计中,振荡器是一重要的组件,广泛应用于信号发生、无线通信和音频设备中。一般来说,设计一稳定的正弦波振荡器往往需要运算放大器或复杂的电路结构。然而,是否可以仅用
    的头像 发表于 01-07 12:00 ?604次阅读
    <b class='flag-5'>两个</b>晶体管能如何实现高效正弦波振荡?

    ADC124S021同时使用两个通道,两个通道的转换数据发生串扰怎么解决?

    用DSP的SPI接口接ADC124S021,如果只是进行单通道的信号采集,则转换后的数值稳定,但是同时使用两个通道时则两个通道的数据发生串扰现象。如,我单独使用2通道,则转换后数值稳
    发表于 12-30 07:41

    从时域和频域两个角度对信号进行分析

    一般来说,我们会从时域和频域两个角度,分别对信号进行分析。 时域 时域是真实世界存在的域,按时间顺序呈现。例如,在某个时钟信号的时域图中,可以观察到两个重要的参数,波形的周期和上升沿:
    的头像 发表于 11-19 10:18 ?3544次阅读
    从时域和频域<b class='flag-5'>两个</b>角度对<b class='flag-5'>信号</b>进行分析

    单相电机两个绕组都在定子上吗

    单相电机的两个绕组,即起动线圈(或称为辅助绕组、副绕组)和运行线圈(或称为主绕组),都位于定子上 。这两个绕组在电机中起着关键作用,共同协作以产生旋转磁场,从而使电机能够运转。 单相电机通常由一
    的头像 发表于 09-03 15:10 ?2312次阅读

    ad如何设置两个元器件的距离

    在Altium Designer(简称AD)中设置两个元器件之间的距离,主要是通过设置元器件间的安全间距(Clearance)规则来实现的。这个规则定义了元器件之间、元器件与走线之间以及其他设计元素
    的头像 发表于 09-02 15:31 ?1.8w次阅读

    如何用块ad9851实现输出正交的两个余弦信号

    我们用ad9851输出两个正交的两个余弦信号,是只要我们用同一时钟信号给他们输入clk信号
    发表于 09-02 07:26

    使用比较器TLV3501把模拟信号转化为数字信号,为什么振荡出的信号总会有两个连续的波形?

    和15pf。但是振荡出的信号总会有两个连续的波形。 具体图如下: 2为蓝色,是模拟信号。1为黄色,是比较器输出信号。4为绿色,是比较器上升沿触发振荡产生的
    发表于 08-29 08:11

    功放机AB两个声道输出怎么接

    功放机AB两个声道输出的接线方式,主要取决于您想要实现的音频效果以及音箱的配置。以下将详细介绍几种常见的接线方式,以及它们各自的特点和适用场景。 一、基础接线方式 在大多数情况下,功放机的AB两个
    的头像 发表于 08-23 10:40 ?9956次阅读

    单稳态触发器的两个工作状态是什么

    单稳态触发器是一种数字逻辑电路,广泛应用于各种电子设备和系统中。它具有两个工作状态:稳定状态和暂态状态。 单稳态触发器的工作原理 单稳态触发器是一种具有两个稳定状态的触发器,其中一状态是稳定状态
    的头像 发表于 08-22 10:11 ?1218次阅读

    具有两个独立PLL、八路输出、集成EEPROM的LMK03328超低抖动时钟发生器数据表

    电子发烧友网站提供《具有两个独立PLL、八路输出、集成EEPROM的LMK03328超低抖动时钟发生器数据表.pdf》资料免费下载
    发表于 08-21 09:14 ?0次下载
    具有<b class='flag-5'>两个</b>独立PLL、八路输出、集成EEPROM的LMK03328超低抖动时钟<b class='flag-5'>发生</b>器数据表

    触发器的两个稳定状态分别是什么

    触发器作为数字电路中的基本逻辑单元,具有两个稳定状态,这两个状态通常用于表示二进制数码中的0和1。
    的头像 发表于 08-12 11:01 ?3141次阅读

    双稳态电路的两个稳定状态是什么

    双稳态电路是一种具有两个稳定状态的电子电路,广泛应用于数字电路、通信系统、存储器等领域。 双稳态电路的基本概念 双稳态电路是一种具有两个稳定状态的电路,即在没有外部输入信号的情况下,电路可以保持在
    的头像 发表于 08-11 15:00 ?2705次阅读

    双稳态触发器的两个基本性质是什么

    的定义 双稳态触发器是一种具有两个稳定状态的逻辑电路,通常由两个交叉耦合的反相器或门电路构成。在没有外部输入信号的情况下,双稳态触发器可以保持在两个稳定状态之一,即“0”状态或“1”状
    的头像 发表于 08-11 10:08 ?1437次阅读