Linux中信号的处理

news2024/11/15 17:21:06

进程正在递达某一个信号期间,同类型的信号无法被递达!!!

当当前信号正在被捕捉事,系统会自动将当前信号加入到进程的信号屏蔽字(block)。

当信号完成捕捉动作,系统又会自动解除对该信号的屏蔽。

一般一个信号被解除屏蔽的时候,会自动进行递达当前屏蔽信号,如果当前信号已经被pending的话,没有就不做任何动作。(pending=1)

进程处理信号的原则是串行的处理同类型的信号,不允许递归。

代码验证:

#include<iostream>
#include<cstdio>
#include<signal.h>
#include<unistd.h>

using namespace std;

void Count(int cnt)
{
    while(cnt)
    {
        printf("cnt: %2d",cnt);
        fflush(stdout);
        cnt--;
        sleep(1);
    }
    printf("\n");
}
void handler(int signo)
{
    cout<<"get a signo: "<<signo<<"正在处理..."<<endl;
    Count(20);
}

int main()
{
    struct sigaction act , oact;
    act.sa_handler = handler;
    act.sa_flags=0;
    sigemptyset(&act.sa_mask);
    sigaddset(&act.sa_mask,3);
    sigaction(SIGINT,&act,&oact);
    while(true) sleep(1);
    return 0;
}

./mysignal
get a signo: 2正在处理...
cnt: 20cnt: 19cnt: 18cnt: 17cnt: 16cnt: 15cnt: 14cnt: 13cnt: 12cnt: 11cnt: 10cnt:  9cnt:  8cnt:  7cnt:  6cnt:  5cnt:  4cnt:  3cnt:  2cnt:  1
get a signo: 2正在处理...
cnt: 20cnt: 19cnt: 18cnt: 17cnt: 16cnt: 15cnt: 14cnt: 13cnt: 12cnt: 11cnt: 10cnt:  9cnt:  8cnt:  7cnt:  6cnt:  5cnt:  4cnt:  3cnt:  2cnt:  1
Quit (core dumped)

虽然有一堆,但最后只会处理前两个。

第一次递达时2,3号均被屏蔽,所以没用

连续两次发送2号信号,处理一个后,3号信号来不及处理,处里另一个2号信号。

2个2号信号处理完后解除屏蔽,处理3号信号。

head做右值时代表的是head所指向的地址。

CPU执行指令的流程:

取指令

分析指令

执行指令

将结果写回对应的内存

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1982638.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

R语言BIOMOD2 及机器学习方法的物种分布模拟与案例分析

BIOMOD2是一个R软件包&#xff0c;用于构建和评估物种分布模型&#xff08;SDMs&#xff09;。它集成了多种统计和机器学习方法&#xff0c;如GLM、GAM、SVM等&#xff0c;允许用户预测和分析物种在不同环境条件下的地理分布。通过这种方式&#xff0c;BIOMOD帮助研究者评估气候…

Linux-理解shell

文章目录 5. 理解shell5.1 shell的类型5.2 交互shell和系统默认shell5.3 安装zsh shell程序5.4 shell的父子关系5.5 命令列表5.6 命令分组5.7 使用命令分组创建子shell5.8 子shell用法5.9 shell的非内建命令和内建命令5.9.1 非内建命令5.9.2 内建命令5.9.3 history和alias命令介…

Cornerstone加载本地Dicom文件第二弹 - Blob篇

&#x1f340; 引言 当我们刚接触Cornerstone或拿到一组Dicom文件时&#xff0c;如果没有ImageID和后台接口&#xff0c;可能只是想简单测试Cornerstone能否加载这些Dicom文件。在这种情况下&#xff0c;可以使用本地文件加载的方法。之前我们介绍了通过node启动服务器请求文件…

cuda pytorch安装详细教程 GPU版

1.先安装anaconda Anaconda 1.1这里用了最简单的方法&#xff0c;后面将pytorch直接安装到base配置下面了。 1.2下载安装&#xff0c;全部勾选。 一定添加文件夹到path中去&#xff0c;否则后面下载pytorch&#xff0c;无法传输。 1.3 通过cmd&#xff0c;输入conda --versio…

CSP-J 模拟题2

如果x大于45&#xff0c;则输出-1 设定一个整数now&#xff0c;他的初始值为9&#xff1b; 当x>now&#xff0c;就x-now&#xff0c;并且now--; 根据解析写代码1&#xff1a; #include <bits/stdc.h> using namespace std; int a[101010]; int main(){int x;cin>…

设计师必备网站,素材、灵感一手抓

设计师都在哪些地方找素材&#xff0c;找灵感&#xff1f;分享8个设计师必备网站&#xff0c;素材免费下载&#xff0c;还能看到很多国内外大神的设计之作&#xff0c;赶紧收藏起来吧~ 1、baotu 包图网_专注原创商用设计图片下载&#xff0c;会员免费设计素材模板独家图库 国内…

QChart笔记7:基于QPolarChart的雷达图、能力图

六边形战士这个词经常听说&#xff0c;用来描述这个词的是六边形雷达图/能力图。在网上搜索如何用QChart实现没有找到&#xff0c;于是就自己研究出一种写法。 先看看效果&#xff1a; 可以用这个图表示游戏中的人物属性&#xff0c;看看我的几个不太厉害的NPC。 在QT自带的实…

STL—容器—list【list的介绍和基本使用】【list的迭代器失效问题】

STL—容器—list list的使用并不难&#xff0c;有了之前使用string和vector的基础后&#xff0c;学习起来并不难。因此这里不在详细的讲解如何使用&#xff0c;而是大致的将其基本接口都熟悉一下 1.list介绍 list的文档介绍 list是可以在常数范围内在任意位置进行插入和删除…

解决App推广难题,Xinstall带你实现一键唤起,提升用户转化率!

在移动互联网时代&#xff0c;App的推广和运营成为了开发者们面临的一大挑战。如何让用户在各种场景下快速、便捷地唤起你的App&#xff0c;提升用户转化率和活跃度呢&#xff1f;今天&#xff0c;就让我们一起来了解一下Xinstall这一神奇的助手&#xff0c;它将如何解决这些痛…

基于YOLOv10和半监督学习的小麦麦穗检测算法:YOLOv10_ssod

基于YOLOv10和半监督学习的小麦麦穗检测算法&#xff1a;YOLOv10_ssod 1.引言2.数据集2.1 公共数据集2.2 自制数据集 3.YOLOv10算法及改进3.1 YOLOv10原版算法3.2 YOLOv10算法改进3.3 对比实验 4.半监督学习方法5.训练效果5.1最终检测效果5.2YOLOv10的精度曲线图5.3 半监督YOLO…

【Material-UI】Button 组件中的图标和标签按钮(Buttons with Icons and Label)详解

文章目录 一、基础用法1. 左侧图标&#xff08;startIcon&#xff09;2. 右侧图标&#xff08;endIcon&#xff09; 二、图标与标签的搭配三、高级用法和最佳实践1. 自定义图标2. 视觉一致性3. 动态图标 四、总结 在现代用户界面设计中&#xff0c;图标在提高用户体验&#xff…

如何礼貌且高效地应对工作中的无关问题

目录 礼貌而简洁地回应引导至相关资源设置边界利用自动回复工具委婉地拒绝建议通过正式渠道提问引导至相关资源的详细例子设置边界的详细例子深入探讨如何应对无关问题1. 培养对方的自主学习能力2. 利用团队合作3. 利用技术工具提高效率4. 定期培训和分享 具体的案例分析案例一…

初始Spring与SpringIOC容器

一、 Spring框架的基本理解 Spring框架是一款轻量级的开发框架&#xff0c; 核心思想是IOC (控制反转) 和AOP (面向切面编程)&#xff0c; 为Java 应用程序开发提供组件管理服务&#xff0c;用于组件之间的解耦&#xff0c;以及简化第三方JavaEE中间件技术的使用( JMS、任务调度…

python XML2SRS

step 1:练习XPATH 选取text-property标签具有nametext 属性值的标签的值 //text-property[nametext] import os import lxml.etree as etree dir "E:\\" for file in os.listdir(dir):if file.endswith(.rptdesign):with open(dirfile,r,encodingutf-8) as f:firs…

高翔【自动驾驶与机器人中的SLAM技术】学习笔记(五)卡尔曼滤波器一:认知卡尔曼滤波器;协方差矩阵与方差;

卡尔曼滤波器 为了研究卡尔曼&#xff0c;我阅读了大量博文。不敢说完全吃透&#xff0c;但是在做一件什么事&#xff0c;可以通过下面这文章来理解&#xff0c;我读了不下五遍。并整理标准重点&#xff0c;添加自己的一些见解。 自动驾驶传感器融合算法 - 自动驾驶汽车中的激…

mprpc框架的应用示例

一、注册 有一个本地服务&#xff0c;我想把它发布成远程服务&#xff0c;首先在user.proto中定义rpc方法的描述&#xff0c;定义参数和响应的消息类型 然后在userservice.cc文件中通过继承UserServiceRpc这个类&#xff0c;重写一下响应的方法&#xff08;打四个动作&#xf…

深入了解Synchronized原理

深入了解Synchronized原理 第一章&#xff1a;并发编程中的三个问题1.1 可见性1.2 原子性1.3 有序性 第二章&#xff1a;Java内存模型(JMM)2.1 计算机结构简介2.2 Java内存模型 Java Memory Molde 第三章&#xff1a;synchronized保证三大特性3.1 synchronized保证原子性3.2 sy…

收藏!AIGC创业者必备,AI绘画商业变现保姆级全攻略

随着AI爆火后&#xff0c;AI绘画也随之兴起&#xff0c;每次都有人问我&#xff0c;AI绘画如何变现。来&#xff0c;既然大家对商业赚钱这一块还是很关心的&#xff0c;那今天给大家分享我正在做的AI绘画的商业项目保姆级攻略&#xff0c;重点会偏向于术。全程很干&#xff0c;…

六、8 TIM编码器计数和测速代码

&#xff08;1&#xff09;所用函数 &#xff08;2&#xff09; 1&#xff09; 上拉输入和下拉输入选择&#xff1a;与外部模块保持一致 若外部模块空闲默认输出高电平&#xff0c;就选择上拉输入&#xff0c;默认输入高电平&#xff1b;若外部模块空闲默认输出低电平&#x…

sql注入——二次注入

二次注入 简介工具环境具体实施 简介 二次注入是一种较为隐蔽的 SQL 注入攻击方式。它并非直接在输入时进行攻击&#xff0c;而是先将恶意数据存储到数据库中&#xff0c;这些数据看似正常。随后&#xff0c;应用程序在后续的操作中&#xff0c;再次使用或处理这些之前存储的恶…