linux信号处理

Linux kernel 分析之十一:信号通信 信号是进程之间通信的一种方式。它包括3部分操作: 1.设置信号处理函数。系统调用signal。内核调用sys_signal(),设置当前进程对某信号的处理函数。 2.发送信号.系统调用kill。内核调用sys_kill()。向目标进程发送信号。3.接收并处理信号。目标进程调用do_signal()处理信号。 从用户态的角度看,目标进程在执行用户态的代码时突然“中断”,转而去执行对应的信号处理 阅读详情

linux在构造信号处理过程中面临内核态触发用户态代码的问题。当信号到达内核,内核不可能直接执行用户态的代码。所以,内核利用的方式是将用户态进程的栈帧扩展,然后直接返回用户态,利用伪造的栈信息执行信号量。

这是内核给用户态的程序提供的一个接口。
arch/arm64/kernel/vdso/vdso.lds.S

ENTRY(__kernel_rt_sigreturn)
    .cfi_startproc
        .cfi_signal_frame
        .cfi_def_cfa    x29, 0
        .cfi_offset     x29, 0 * 8
        .cfi_offset     x30, 1 * 8
        mov     x8, #__NR_rt_sigreturn
        svc     #0
        .cfi_endproc
ENDPROC(__kernel_rt_sigreturn)

__kernel_rt_sigreturn,做一个系统调用,查询系统调用表,对应的函数是sys_rt_sigreturn

arm下面利用vdso __kernel_rt_sigreturn恢复保存的用户态栈信息,

- [Depth] [Result]  [VA]  [RVA]  [Sym]   [Img]
        0  80000003  7FA03F4F0C  BFF0C  <unknown>   /lib/aarch64-linux-gnu/libc-2.23.so
        1  80000003  7FA06C933C  533C  <unknown>   /usr/lib/aarch64-linux-gnu/libdrm.so.2.4.0
        2  80000003  7FA06CFD8C  BD8C  <unknown>   /usr/lib/aarch64-linux-gnu/libdrm.so.2.4.0
        3  80000003  7F9FCD2A4C  50A4C  <unknown>   /usr/lib/xorg/modules/drivers/radeon_drv.so
        4  80000003  5579F67138  CC138  <unknown>   /usr/lib/xorg/Xorg
        5  80000003  557A036C74  19BC74  <unknown>   /usr/lib/xorg/Xorg
        6  80000003  557A0378E0  19C8E0  <unknown>   /usr/lib/xorg/Xorg
        7  80000003  5579F06740  6B740  <unknown>   /usr/lib/xorg/Xorg
        8  80000003  5579F06D54  6BD54  <unknown>   /usr/lib/xorg/Xorg
        9  80000003  5579F08308  6D308  <unknown>   /usr/lib/xorg/Xorg
        10  80000003  5579F0873C  6D73C  <unknown>   /usr/lib/xorg/Xorg
        11  80000003  7F9FC35178  6178  <unknown>   /usr/lib/xorg/modules/input/evdev_drv.so
        12  80000003  7F9FC35808  6808  <unknown>   /usr/lib/xorg/modules/input/evdev_drv.so
        13  80000003  5579F300D0  950D0  <unknown>   /usr/lib/xorg/Xorg
        14  80000003  5579F53E94  B8E94  <unknown>   /usr/lib/xorg/Xorg
        15  80000004  7FA089E6C0  6C0  <unknown>   <unknown>
        16  10000000  7FA03F56AC  C06AC  <unknown>   /lib/aarch64-linux-gnu/libc-2.23.so
        17  10000000  557A046098  1AB098  <unknown>   /usr/lib/xorg/Xorg
        18  10000000  5579EF00F4  550F4  <unknown>   /usr/lib/xorg/Xorg
        19  10000000  5579EF43EC  593EC  <unknown>   /usr/lib/xorg/Xorg
        20  10000000  7FA0354920  1F920  <unknown>   /lib/aarch64-linux-gnu/libc-2.23.so
        21  10000000  5579EDDFF8  42FF8  <unknown>   /usr/lib/xorg/Xorg

整个栈会在 va 6c0执行栈恢复,在网上的栈其实信号处理函数的栈。当返回va 6c0栈信息恢复到信号触发前,进程继续运行。

CentOS 7 安装实时内核补丁 【方法一:yum 安装】 在 /etc/yum.repos.d 目录下新建一个CentOS-7-rt.repovim /etc/yum.repos.d/CentOS-rt.repo # CentOS-rt.repo [rt] name=CentOS-7-rt baseurl=http://mirror.centos.org/centos/\$releasever/rt/\$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY- 阅读详情

相关推荐

Linux信号处理

大家应该都了解当我们在Linux下面运行程序时,如果程序跑飞了,那我们可以通过Ctrl-C来终止掉跑飞的程序,其实,当我们按下Ctrl-C时,涉及到了信号的相关处理工作,所以,今天我们就来谈一谈Ctrl-C被后的信号处理吧。什么是信号信号其实是一种软件中断,它为程序提供了一种处理异步事件的方法,所谓的异步事件就是事件的发生在任何事件都有可能,很多重要的程序都需要对信号进行处理。在Linux中一共有多

leap的博客 2210

Linux kernel signal原理(下)- aarch64架构sigreturn流程

aarch64 sigreturn

weixin_43412488的博客 1230

Linux信号处理函数详解

一下内容引述《Linux/Unix系统编程详解》 设计信号处理函数 信号处理函数设计得越简单越好,这样降低引发竞争条件的风险。 两种常见设计 信号处理函数设置全局性标志变量并退出,主程序对此标记进行周期性检查,一旦置位随机采取相应动作; 信号处理器函数执行某种类型的清理动作,接着终止进程或者使用非本地跳转将栈解开并将控制返回到主程序中的预定位置; 可重入函数与异步信号安全函数 可重入函数 首先区分单线程程序和多线程程序。典型的UNIX程序都具有一条执行线程,贯穿程序始终,CPU围绕单条执行逻辑来处理指令

WeinKee的博客 1146

读Kernel感悟-伪装现场-内核线程

文章来源:http://www.top-e.org/jiaoshi/class/众所周知,内核中创建一个内核线程是通过kernel_thread实现的。声明如下:int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);我们知道,用户态创建线程调用clone(),如果要在内核态创建线程,首先想到的是在内核

李亚锋老师 1749

linux信号处理函数的可重入性

在信号处理函数中,尽量使用可重入的函数接口(即操作的数据都是在堆栈上,不涉及全局变量),否则会引起数据的崩溃。一个简单的演示程序可以说明这点。 #include #include int a=0; void  handleSig5(int num, siginfo_t * info, void * no_used) { a = 5; printf("before

2603

kernels-rt:具有实时补丁的内核(v 5.x)和模块

带有RT(RealTime)补丁的内核和模块: linux-rt-bfq-dev linux-rt-bfq-dev-git linux-rt-bfq-dev / linux-rt-bfq-dev-git包含: Valente和BFQ团队撰写的最新修复 -Paolo Valente和BFQ Team编写的最新修复 由Paolo Valente和BFQ Team撰写并由Piotr Gorski分叉的最新修复程序 / -Paolo Valente和Piotr Gorski创作的特定补丁 / -由Piotr Gorski创作的特定补丁 BFQ的某些补丁与BFQ-dev的补丁冲突。 要使用linux-rt-bfq-dev / linux-rt-bfq-dev-git,请在bfq-dev补丁之前平稳地应用bfq-reverts。 否则,内核将无法编译。 / Piotr Gorski创

LINUX 信号处理_linux 信号处理流程

1、字段sa_handler是一个函数指针,用于指向原型为void handler(int)的信号处理函数地址,sighandler_t是信号捕捉函数,由signal函数注册,注册以后,在整个进程运行过程中均有效,并且。4、字段sa_mask是一个包含信号集合的结构体,该结构体内的信号表示在进行信号处理时,将要。2、如果信号处理函数正在处理信号, 并且还没有处理完毕时,又发生了一个同类型的信号,这时。1、注册一个信号处理函数,并且处理完毕一个信号之后,是否需要重新注册,才能够捕捉下一个。

2401_86402545的博客 1505

kernel-rt-kvm-3.10.0-1127.rt56.1093.el7.x86_64.rpm

官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装

【Linux信号处理】

1、忽略2、终止进程3、终止进程并产生core文件(记录内存映像)4、停止5、继续6、捕获并处理 (在信号发生前,先向内核注册一个函数,当信号来临时系统会自动执行该函数)

electronic_J的博客 1426

解锁 STP 与 SOLIDWORKS 转换密码:工具及迪威在线转换秘籍

STP 文件能够完整地记录 3D 模型的几何形状、尺寸、公差、材料属性等丰富信息,无论是简单的机械零件,还是复杂的装配体,都能精准呈现。而在线转换以迪威模型为例,凭借便捷性、高效性和安全性,为广大 3D 专业技术人员和学生党在无需安装额外软件的情况下,轻松实现格式转换提供了有力支持。在实际工作和学习中,可根据自身具体情况灵活选择合适的转换方式,以确保 3D 设计工作流程的顺畅进行,让创意在不同格式间自由流动并绽放光彩。在 3D 设计与建模的广袤世界里,不同格式文件间的转换常常是连接创意与实现的关键桥梁。

技术说明博主 3445

高效静音黑科技 —— 单相直流无刷电机驱动器

然而,传统的BLDC电机驱动通常依赖于三相架构,电路复杂,成本高昂,且在低功率应用中显得有些“大材小用”。单相直流无刷电机驱动器作为一项高效、静音、经济的技术,正逐渐改变着各个领域的电机驱动方式。其精巧的控制策略、显著的优势以及广阔的应用前景,都预示着这项技术将在未来扮演越来越重要的角色。它相较于传统的三相驱动,显著简化了电路结构,降低了成本,尤其适用于低功率、对静音要求极高的应用场景。通过这些模块的协同工作,单相直流无刷电机驱动器能够实现对电机速度、扭矩的精确控制,并最大程度地降低噪声和振动。

wen8789的博客 1764

sigv linux 信号,LINUX 信号处理

转自:http://zhangcy.anytome.com/20060321121911820418131452020050715/35.xml一 入门信号是有雷同的或不同的历程向一个历程递交的事件。信号等闲用来向一个历程通知失常事件。术语:发生(generate):当导致信号发生的事件揭示时,例如硬件失常,就发生一个针对某个历程的信号递交(deliver): 当历程对发给它的信号历程处理时,称为...

weixin_36360543的博客 186

华为昇腾 910B 实战:DeepSeek-R1 蒸馏模型高效部署与性能调优全解析

本文详细解析了在华为昇腾910B硬件平台上高效部署DeepSeek-R1蒸馏系列模型(14B/32B版本)的完整实战流程。内容涵盖从MindIE环境搭建、镜像获取、模型准备,到服务配置、内存参数调优、性能测试及常见问题排查,为开发者提供了基于昇腾910B进行大模型部署与优化的全链路指南。

weixin_28235513的博客 210

linux信号处理函数

linux中信号的处理一般分为四步 1、信号集的安装和登记 2、信号集操作 3、信号的发送 4、信号的接收  下面分阶段详细说明 1、信号集的安装和登记 使用sigaction函数对信号进行安装和登记 ngx_init_signals(ngx_log_t *log) {     ngx_signal_t      *sig;     struct sigaction

BOKE 907

用KalmanNet搞定非线性状态估计:当卡尔曼滤波遇上神经网络

本文深入探讨了KalmanNet如何将神经网络与卡尔曼滤波结合,以解决非线性状态估计中的模型失配和噪声不确定性问题。通过保留经典滤波框架并用RNN学习卡尔曼增益,该方法在无人机导航、机器人定位等场景中实现了模型驱动与数据驱动的优势互补,提升了估计的鲁棒性和灵活性。

mango的博客 310

AMBA-CHI协议详解(二)

读事务,写事务,原子事务,Stash事务,Dataless事务,DVM事务,Retry事务。

Crazzy_M的博客 6652

Linux信号处理详细介绍

建立在早期的信号处理机制(1-31)的信号是不可靠信号,意味着它不支持排队,可能会丢失,如果同一个信号连续产生多次,进程可能只相应一次,但是多个不同的信号,会按照时间顺序从后往前相应。2、当信号处理完后可能会返回产生信号的代码继续运行,如果我们捕获并处理段错误、算术异常等信号可能会产生死循环,正确的处理段错误、算数异常信号应该是备份数据并直接结束程序。当信号产生时,内核会在其维护的信号表中为对应的进程设置与该信号对应的标记,这个过程叫做递送。功能:设置要屏蔽的信号、这些信号是存储在信号集里面。......

sorryking_的博客 662

2026年沐曦集成电路数字IC笔试试卷带答案

本文摘要: 这是一份数字IC设计笔试模拟题,包含单选题、波形分析、多选题和代码设计题。重点考察ASIC设计流程(如逻辑综合将RTL转为门级网表)、时序分析(建立时间余量计算)、跨时钟域处理(格雷码应用)、复位机制、状态机设计等核心知识点。涉及沐曦特色考点如GPU架构(SIMT模型)、国产GPU芯片(曦云C系列)及MXMACA软件栈。代码题要求实现50%占空比三分频电路,综合考察Verilog设计能力。试题强调PPA优化、低功耗技术等工程实践要点,覆盖数字IC前端设计全流程核心内容。(149字)

Open 259

Linux 信号处理函数

#include <stdio.h> #include <unistd.h> #include <signal.h> #include <string.h> #include <ostream> #include <cerrno> static int s_handle_count = 0; static std::str...

忧桑的小兔子 2649

基于综合阻抗特征的配电架空线路单相断线故障区段定位研究

本文提出了一种基于综合阻抗特征的配电架空线路单相断线故障区段定位方法。通过分析故障后正序、负序阻抗变化,构造综合阻抗判据实现精准定位。仿真结果表明:该方法能有效识别故障区段,差异度判据显著(故障区段达0.508,非故障区段<0.016);对过渡电阻(1-200Ω)和负荷变化具有强鲁棒性,定位准确率不受影响。相比传统方法,综合阻抗法放大了断线故障特征,解决了弱故障信号检测难题,为配电网安全运行提供了可靠的技术手段。

AI的内部世界的博客 81

项目模块提取生成jar包上传到nexus供其他项目使用

项目场景: 微服务项目当中的某一个模块其他项目进行复用,资源管理搭建的有私服 nexus。 问题描述: 如果把功能用到其他项目,代码重复量太大,不想些重复的代码。 原因分析: 如果把这个模块单独提取出来进行复用,至于操作数据库的功能,使用远程调用进行数据库操作,这样就能解决相同模块重复编写的工作。量。 解决方案: 首先对模块代码进行封装提取,把一些用到的参数提取出来,以传参的形式来对参数进行传递。这个需要根据具体的情况进行代码提取,提取之后把这个模块的代码进行打包,打包可以借助开发工具进行打包(记得使用 d

lierjun 的专栏 451
上一篇: sudo 控制权限原理
下一篇: dwarf 栈解析格式小结
inquisiter
博客等级 码龄10年 374粉丝 228原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值