当前位置: 首页 > article >正文

Linux 信号(signal):信号的捕捉流程

目录

  • 一、程序的运行状态
  • 二、信号捕捉流程

  在处理信号的时候,其实要经过一系列流程的,本文就来简单介绍一下信号处理的捕捉流程。

一、程序的运行状态

  程序运行状态分为内核态和用户态。程序在运行库函数、用户自定义函数等第三方函数时就会在用户态运行;而程序在运行系统调用接口时是在内核态运行

  因为库函数和自定义函数等都不是系统自己提供的接口,不允许直接访问内核。但系统调用接口是系统提供的,用于访问内核的接口。

运行空间

二、信号捕捉流程

 (1)main函数是一个程序的开始,此时程序运行在用户态,当遇到以下几种情况程序就会从用户态切换到内核态运行:

  • 调用系统调用接口
  • 异常
  • 中断

 (2)运行到内核态之后,系统会针对这些情况进行处理,处理之后,在返回用户态之前系统会进行一个操作:do_signal()。(这个接口就是用来查看现在有没有待处理的信号

 (3)如果查询到了现在有信号待处理,那么就根据信号的处理方式进行处理:

  • 默认处理方式 or 忽略处理方式: 在内核态中对信号进行处理(因为默认的处理方式是系统提供的)
  • 用户自定义的处理方式: 需要切换到用户态去处理自定义的函数

 (4)如果在用户态运行完毕自定义处理函数,那么系统还会再调用一个接口:sigreturn()。(从用户态返回内核态)之所以还要返回内核态是因为系统要再看一下还有没有信号要处理。

 (5)然后在从内核态返回到用户态之前,会再次调用:do_signal()。再次查看有没有信号待处理,如此循环往复,直到某一次发现没有信号待处理了,才会彻底返回用户态,继续接下来的程序运行。

 (6)也就是说,信号的处理其实是在程序运行从内核态切换到用户态之前进行处理的,并且是把当前所有没有处理的信号全都处理完,才会彻底返回用户态进行程序的下一步运行。

上述步骤结合图片食用,效果更佳:

信号捕捉流程


http://www.kler.cn/a/2748.html

相关文章:

  • C# 检查一个字符串是否是科学计数法格式字符串 如 1.229266E+01
  • 03、MySQL安全管理和特性解析(DBA运维专用)
  • 【Vim Masterclass 笔记05】第 4 章:Vim 的帮助系统与同步练习(L14+L15+L16)
  • python 如何调整word 文档页眉页脚
  • 【软考网工笔记】计算机基础理论与安全——网络规划与设计
  • 类的定义和使用(python)
  • Mysql用户权限分配详解
  • 【Python_requests学习笔记(七)】基于requests模块 实现动态加载数据的爬取
  • 基于微信小程序的投票评选系统小程序
  • 详细介绍less(css预处理语言)
  • 解忧杂货铺(五续集):用了无法离开的网站资源
  • 【STM32】STM32内存映射以及启动过程(超详细过程)
  • 【蓝桥杯集训·每日一题】AcWing 1051. 最大的和
  • 【C陷阱与缺陷】----语法陷阱
  • Android APP检查设备是否为平板
  • 华为笔试题OD
  • 半导体器件基础08:MOS管结构和原理(2)
  • 小程序和Vue写法的区别
  • OpenHarmony基于BearPi-HM Micro开发板,App常用组件使用 -- 上篇
  • ArcGIS:如何进行建筑密度分析?
  • 动词语气(虚拟语气)
  • python实战应用讲解-【numpy科学计算】应用小技巧(一)(附python示例代码)
  • Python模块
  • Springboot+vue开发的图书借阅管理系统项目源码下载-P0029
  • Fuzzing101系列 Exercise 1 - Xpdf
  • 关于肺结节实时的目标检测