首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux信号处理

目前 Linux 支持64种信号。信号分为非实时信号(不可靠信号)和实时信号(可靠信号)两种类型,对应于 Linux 的信号值为 1-31 和 34-64。...信号实现原理 接下来我们分析一下Linux对信号处理机制的实现原理。...为了尽快让信号得到处理,Linux把信号处理过程放置在进程从内核态返回到用户态前,也就是在 ret_from_sys_call 处: // arch/i386/kernel/entry.S ENTRY...我们知道,从内核态返回到用户态时,CPU要从内核栈中找到返回到用户态的地址(就是调用系统调用的下一条代码指令地址),Linux为了先让信号处理程序执行,所以就需要把这个返回地址修改为信号处理程序的入口,...Linux的做法就是在用户态栈空间构建一个 Frame(帧)(我也不知道为什么要这样叫),构建这个帧的目的就是为了执行完信号处理程序后返回到内核态,并恢复原来内核栈的内容。

5.9K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Linux】信号的处理

    信号的处理 1 信号的处理 2 内核态 VS 用户态 3 键盘输入数据的过程 4 如何理解OS如何正常的运行 5 如何进行信号捕捉 信号处理的总结 6 可重入函数 volatile关键字 Thanks♪...下一篇文章见 1 信号的处理 处理信号本质就是递达这个信号!...我们说过:信号可能不会被立即处理,而是在合适的时候进行处理。那么这个合适的时候到底是什么时候?! 进程从内核态(处于操作系统的状态)返回到用户态(处在用户状态)的时候进行处理!...来看Linux内核: 在操作系统的主函数中,首先是进行一些初始化(包括系统调用方法),然后就进入到了死循环!...我们慢慢来说: 首先信号处理有一个特性,比如我们在处理二号信号的时候,默认会对二号信号进行屏蔽!对2号信号处理完成的时候,会自动解除对2号信号的屏蔽!

    9510

    Linux 中断处理浅析

    最近在研究异步消息处理, 突然想起linux内核的中断处理, 里面由始至终都贯穿着”重要的事马上做, 不重要的事推后做”的异步处理思想....正在处理同一中断的那个CPU完成一次处理后, 会再次检查”触发”标记, 如果设置, 则再次触发处理过程. 于是, 中断的处理是一个循环过程, 每次循环调用handle_IRQ_event来处理中断....中断处理的这几个阶段中不能调用可能导致睡眠的函数(包括分配内存); 对于第一个问题, 较新的linux内核增加了ksoftirqd内核线程, 如果持续处理的softirq超过一定数量, 则结束中断处理过程...据说在montavista(一种嵌入式实时linux)中, 将内核的中断机制做了修改. (某些中断的)中断处理过程被赋予了task结构, 能够被内核调度. 解决了上述两个问题....工作队列 linux基线版本的内核在解决上述问题上, 提供了workqueue机制.

    7.4K80

    初识Linux · 信号处理

    捕捉信号 这里提问,什么是信号处理呢?处理信号难道不就是信号递达的过程吗?那么我们上次递达信号的时候,谈论到信号递达是有多种方式的,默认是进程终止,还有忽略,还有自定义行为。...那么信号处理的时候,是在什么时候处理呢?是在信号合适的时候处理吧? 那么提问了就,合适的时候,是什么时候呢?...内核方面处理完了,重新返回正文部分。...此时,一根线,将整个流程分为了用户态和内核态,那么合适的信号处理是什么时候呢?这里直接给结论: 信号捕捉的过程,状态切换的时候进行信号的检测和处理。...当前如果正在对n号信号进行处理,默认n号信号会被自动屏蔽。 对n号信号处理完成的时候,会自动解除对n号信号的屏蔽 感谢阅读!

    11010

    初识Linux · 信号处理 · 续

    前言: 在前文,我们已经介绍了信号产生,信号保存,信号处理的主题内容,本文作为信号处理的续篇,主要是介绍一些不那么重要的内容,第一个点是可重入函数,第二个点是在信号处理这里的进程等待。...在Linux中,如果我们有一个链表,我们要对链表执行的操作是insert,那么从main函数进去之后,进行p->next这步的时候突然进行信号捕捉的话,这里肯定有人会有疑问的了,为什么会进行信号捕捉呢?...while (true) { DoOtherThing(); sleep(1); } return 0; } 对于上面的代码是我们信号处理部分熟知的...,我们通过这个代码,验证了子进程退出的时候的的确确会发送17号信号,可是我们在信号处理的时候也知道了,信号如果还没有处理完,是会自动屏蔽当前多出来的信号的,也就是我们创建多个子进程的事儿: for...以上是对于信号处理的补充。 感谢阅读!

    7810

    Linux信号处理机制

    信号是一种进程间通信机制,信号都有一个对应的默认处理行为,信号触发时,信号处理函数和进程正常的执行流程同时存在,这会给编程带来隐患,如果信号处理函数中调用了不可重入函数的话。...如果想要自定义信号处理逻辑,可以使用signal/sigaction函数接口来设置信号处理函数。...Linux信号可以分为两类:可靠信号和不可靠信号,信号值在[1,31] 之间的所有信号,都被称为不可靠信号;在[SIGRTMIN,SIGRTMAX] 之间的信号,被称为可靠信号。...信号未决状态是指 从生成信号到信息处理逻辑执行的这段时间。 常见的Linux信号如下(可以通过命令kill -l查看): SIGHUP 1 终端挂起或控制进程终止。...从信号生成到执行信号处理逻辑这段时间,信号是未决的。 在信号处理函数期间,有可能还会收到其他信号,当然也有可能再次收到正在处理的信号。如果在处理A信号期间再次收到A信号,会发生什么呢?

    3.4K21

    Linux进程信号【信号处理】

    关于信号何时处理、该如何处理,本文中将会一一揭晓 捕捉动作并进行处理 ---- ️正文 1、信号的处理时机 直奔主题,谈谈信号的 处理时机 1.1、处理情况 普通情况 所谓的普通情况就是指...普通情况 就有点难搞了,它需要等待 “合适” 的时机,才能被 递达,继而被 处理 1.2、“合适” 的时机 信号的产生是 异步 的 也就是说,信号可能随时产生,当信号产生时,进程可能在处理更重要的事,此时贸然处理信号显然不够明智...与真实的地址空间建立映射关系 每个进程都有自己的 进程地址空间,不同 进程地址空间 中地址可能冲突,但实际上地址是独立的 进程地址空间 可以让进程以统一的视角看待自己的代码和数据 关于 进程地址空间 的相关知识详见 《Linux...过程 图片来源:Linux进程信号 ---- 3、信号的捕捉 接下来谈谈 信号 是如何被 捕捉 的 3.1、内核如何实现信号的捕捉?...:信号在 内核态 切换回 用户态 时,才会被处理 ---- 总结 以上就是本次关于 Linux进程信号【信号处理】的全部内容了,本文对信号的处理时机做了探讨,然后学习了 用户态 和 内核态 的相关内容

    25810

    Linux——目录、文件处理命令(上)

    [-选项] [参数] 例:ls -la /etc 说明:当有多个选项的时候,可以写在一起;简化选项前面一般用-,而完整选项前面一般用--,例如-a等于—all;用中括号括起来,表示可选 l 目录处理命令...没有创建时间这个概念;后面的一串就是文件名 这里针对字节大小有个技巧,如果想要Linux直接显示字节大小(带上单位),可以输入 ls -lh ?...图9 l 目录处理命令:cd 命令名称:cd 命令英文原意:change directory 命令所在路径:shell内置命令 执行权限:所有用户 语法:cd 功能描述:切换目录...图10 还有一个简单的目录处理命令pwd,用于显示当前所在目录的绝对路径 ?...图13     Linux系统中是没有类似于windows回收站的概念的,在Linux中删除就没了 有时候我们要删除很多文件,那就会一直提示你是否真的要删除,这种方式很麻烦,所以我们可以在目录前面加上

    3.8K20
    领券