首页
学习
活动
专区
圈层
工具
发布

【Linux】信号的保存

今天我们一起来看看信号时如何进行保存。 信号的保存 在认识信号的保存之前,我们先来熟悉几个概念 实际执行信号的处理动作称为信号递达(Delivery):递达动作: 默认 , 忽略和自定义。...信号从产生到递达之间的状态,称为信号未决(Pending):因为信号是在合适情况才处理,处理之前就要在进程PCB中进行保存。...Linux操作系统为我们提供了用户级别的位图!: sigset_t 每个信号只有一个bit的未决标志,非0即1,不记录该信号产生了多少次,阻塞标志也是这样表示的。...sizeof(uint32_t)*8) ;// -> bits[i]第几个数字中 j = 40 % (sizeof(uint32_t)*8) ;// -> bits[i]:j该数字中的第几位 sigset_t是Linux...— 递达之后清零(通过自定义捕捉可以验证) 这就是信号保存的方式!通过三张表来做到对信号的操作是十分的巧妙!!! Thanks♪(・ω・)ノ谢谢阅读!!! 下一篇文章见!!!

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

    Linux进程信号【信号保存】

    记录信号是否产生,对于 31 个普通信号来说,一个 int 整型就足以表示所有普通信号的产生信息了;信号还有可能被 “阻塞”,对于这种多状态、多结果的事物,操作系统会将其进行描述、组织、管理,这一过程称为 信号保存...不做任何处理动作 handler 用户自定义的信号执行动作 注意: 信号阻塞 是一种手段,可以发生在 信号处理 前的任意时段 信号阻塞 与 忽略动作 不一样,虽然二者的效果差不多:什么都不干,但前者是 干不了...快递送达后,啥也不干,就是玩(忽略) 快递送达后,直接把快递退回去(用户自定义) 当然,用户自定义的情况可以有很多种,也有可能是直接把快递扔了 综上,网购的整个过程可以看作 信号传递过程,本文探讨的是 信号保存阶段...信号在被解除 阻塞状态 后,很快就会 递达 了 关于信号何时递达、以及递达后的处理动作,在下一篇文章中揭晓 以上关于 信号、信号集 的操作都是在进程中进行的,不影响操作系统 ---- 总结 以上就是本次关于 Linux...- 解除阻塞 - 递达信号 的全过程,最终证明 信号在产生之后是保存在 未决表 中的 ----

    1.7K20

    Linux绝对战胜不了Windows系统

    十年前Linux系统一直在叫,高调大捧说Linux系统会取代windows系统,现在来看也丝毫无动于衷,即使再过十年也未必如此。...微软推出的Vista系统为何会失败,很大原因就是因为这个系统不好使用,更要命的是软件兼容性方面比较差,导致很多软件用不了。...由于Linux占的市场份额非常低,用的人很少,导致软件开发商都不太愿意开发基于Linux的软件,因为没人用啊,因此导致Linux的软件应用大大减少。...Linux只能定位在服务器上面,这是它的市场定位;Windows系统却可以定位在桌面市场和服务器市场。各有各的优点,各有各的优势。谁也取代不了谁。 说到这里我不得不提到上网本这方面。...这句话不是我说的,是Linux之父说的。届时Linux系统将更加的危险,四面楚歌!Linux和Windows应该各司其职,各有各的优点,找好自己的市场定位,而不是谁打败谁的问题。

    2.7K60

    linux 连个文件都删除不了,什么鬼!

    于是,出现了后续的糟心事 (linux 下的文件正常删除不了)。 下载了最新版本,在源码包里边 make 之后,出现了好几个错误,上网查了下,有人说最新版本有问题,建议使用 5.0.8 。...很明显,在linux下默认是没有根路径为 "/c" 这样的路径的。因此,就报错没有找到该目录。 这就让人很 dan 疼了,重命名不行,那就尝试下删除吧,大不了我重新上传文件就是了。...由于文件的数据都存储在“块”中,因此我们还需要找到一块区域来保存文件的元信息,包括文件的权限,拥有者,大小,以及存储的位置。而这样的区域就叫做文件索引节点(inode)。...元信息可以理解为是用来保存文件相关信息的信息。可以拿 Java 中的元注解来类比(元注解就是用来标注注解的注解)。 每个 inode 都有一个号码,这个就叫做文件索引节点号。...结语 以上就是在 linux 中删除文件时遇到的坑。若你遇到类似的问题,或者出现了某个文件名中有特殊字符导致删除不了文件,也可以尝试一下以上的操作方式哦。

    3.4K10

    Linux:信号的发送、保存和处理

    你的位图是能保存一次怎么办?? ——> 本来这种设计方案就只能保存1次,假设你一直没能处理该信号,而又接受了很多次该信号,那么其实也只能算一次,其他的就会丢失掉。...二、信号的保存 为什么需要有信号保存??...不用担心处理不了信号!!  3.3 信号的处理方法 sigaction函数可以读取和修改与指定信号相关联的处理动作。调用成功则返回0,出错则返回- 1。...Linux的优化方案设计:   我们会发现优化方案为O1的时候,此时flag就被优化了!!  因为优化导致我们的内存不可见了!!...此方法对于Linux可用,但不保证 在其它UNIX系统上都可 用。请编写程序验证这样做不会产生僵尸进程。父进程就不需要wait了!

    75910

    【Linux】进程信号的发送和保存

    形成的文件叫做core.pid,pid就是出错进程的pid,假设test进程出现错误,12314是它的pid,我们可以通过在gdb模式下输入gdb test core.12314打印错误信息和原因 二、信号的保存...是一个位图block block是一个位图,共31位,对应1 ~ 31号信号,当对应比特位为1时,表示该编号信号被阻塞,为0则表示不阻塞 如果信号被阻塞则进入阻塞态,若没有被阻塞那么信号进入未决状态 3、保存信号...未决状态的作用就是保存信号,它保存信号的方式也是通过位图pending pending也是一个位图,与block一致,对应的下标和信号编号也是一一对应,当对应比特位为1时,表示该编号信号处于未决状态,...为0则信号递达 实际上block和pending都属于保存信号,只不过因为有两个位图,我们分开来说罢了 4、信号递达 信号递达后的信号,会执行相对应的行为,有SIG_DFL:默认处理动作,SIG_IGN...SIG_SETMASK, &bset, &oset); // 重复打印当前进程的 pending 信号集,期间向进程发送 2号信号 // 因为 2号信号被阻塞了,所以 2号信号会一直被保存在

    57310

    【Linux】信号保存与信号捕捉处理

    信号保存与信号捕捉 一、信号保存 1....信号的发送 那么在学习信号保存之前,我们先了解一下信号的发送,我们知道普通信号一共有31个,如下: 但是这个31就非常特殊,对于普通信号而言,对于进程而言,自己有还是没有收到哪一个信号。...理解信号保存 (1)信号保存原因 信号为什么要保存呢?因为进程收到信号之后,可能不会立即处理这个信号,可能正在处理更重要的事情,所以信号不会被处理,就要有一个时间窗口,所以信号就要被保存。...所以进程的 task_struct 中不仅要保存信号的状态,还要保存信号的阻塞状态;而且信号的范围是 1~31,每一种信号都要有自己的一种处理方法,所以在 task_struct 中还要为每一个信号维护一张...信号的处理 我们在上面说过,信号保存是为了让进程在合适的时候处理,那么信号是什么时候被处理的呢?

    70911
    领券