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

【Linux】进程信号_3

文章目录

  • 八、进程信号
    • 2. 信号的保存
    • 3. 信号的处理
  • 未完待续


八、进程信号

2. 信号的保存

实际执行信号的处理动作称为信号递达(Delivery)
信号从产生到递达之间的状态,称为信号未决(Pending)。
进程可以选择阻塞 (Block )某个信号。
被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作。
注意,阻塞和忽略是不同的,只要信号被阻塞就不会递达,而忽略是在递达之后可选的一种处理动作。

在进程的PCB中,有两个位图,一个是判断是否收到相应信号的位图pending,一个是决定该位置的信号是否阻塞的位图block。
在这里插入图片描述
handler表是一组函数指针,决定信号的执行方法。
调用函数 sigprocmask 可以读取或更改进程的信号屏蔽字(阻塞信号集)。
在这里插入图片描述

int main()
{// 创建阻塞信号集sigset_t block, oblock;// 清空信号集sigemptyset(&block);sigemptyset(&oblock);// 将2号信号添加进阻塞信号集sigaddset(&block, 2);// 将阻塞信号集设置到内核中int n = sigprocmask(SIG_SETMASK, &block, &oblock);assert(n == 0);while (true){// 创建pending信号集sigset_t pending;sigemptyset(&pending);// 获取pending信号集n = sigpending(&pending);assert(n == 0);// 打印pending信号集PrintSig(pending);sleep(1);}return 0;
}

在这里插入图片描述
9号信号、19号信号无法被屏蔽,18号信号会做特殊处理。操作系统不允许出现 金刚不坏 的进程。
如何解除屏蔽?

	while (true){int cnt = 0;// 创建pending信号集sigset_t pending;sigemptyset(&pending);// 获取pending信号集n = sigpending(&pending);assert(n == 0);// 打印pending信号集PrintSig(pending);++cnt;if (cnt == 20){// 解除阻塞信号集n = sigprocmask(SIG_UNBLOCK, &block, &oblock);assert(n == 0);}sleep(1);}

3. 信号的处理


未完待续

http://www.lryc.cn/news/384390.html

相关文章:

  • LongRAG:利用长上下文大语言模型提升检索生成效果
  • go中的方法 func-----数据类型
  • 408计算机网络--物理层
  • 十年,亚马逊云科技合作伙伴网络开启AI新征程
  • 基于Spring Boot的在线医疗咨询平台的设计与实现【附源码】
  • 星坤Type-A连接器:创新快充技术,引领电子连接!
  • 入门JavaWeb之 Response 下载文件
  • Java自定义注解校验token并直接返回给前端状态
  • C++ | Leetcode C++题解之第200题岛屿数量
  • Linux安全配置
  • vue实现不预览PDF的情况下打印pdf文件
  • C++ | Leetcode C++题解之第199题二叉树的右视图
  • [leetcode]圆圈中最后剩下的数字/ 破冰游戏
  • mysql数据库的管理
  • Java项目分层(持续更新中)
  • 2024年软件测试面试题大全【答案+文档】
  • 数据赋能(131)——体系:数据转换——概述、关注焦点
  • 【自然语言处理系列】掌握jieba分词器:从基础到实战,深入文本分析与词云图展示
  • TikTok短视频矩阵系统
  • 码题杯:我会修改图
  • MongoDB Map-Reduce 简介
  • 某平台小程序逆向思路整理
  • 黑马苍穹外卖6 清理redis缓存+Spring Cache+购物车的增删改查
  • 鸿蒙开发系统基础能力:【@ohos.systemTime (设置系统时间)】
  • CVE-2020-26048(文件上传+SQL注入)
  • 【面试题】信息系统安全运维要做什么
  • 引导过程与服务器控制
  • 前置章节-熟悉Python、Numpy、SciPy和matplotlib
  • 在Ubuntu上安装和配置配置服务器防火墙(CSF)的方法
  • Python-井字棋