波奇学Linux:信号的发送和保存

信号的发送的对象是pcb

task_struct{
int signal; //0000 0000 .... 0001

进程pcb中存在int型的signal来保存信号,用位图的方式,比特位的0,1表示是否收到信号

比特位位置表示信号的编号。

 发信号的本质就是修改task_struct的信号位图对应的比特位。

信号的作用是为了给用户层传递信息

信号的保存的原因:进程收到信号不会立即处理这个信号,要有个时间窗口

实时信号:立即处理,不能丢失

信号的保存

信号递达,信号未决,信号阻塞

信号递达(delivery):实际执行信号的处理的动作,即执行。

信号未决(pedding):信号从产生到递达之间的状态,就是把修改对应比特位,即信号传到进程。

进程可以选择阻塞(Block)某个信号,被阻塞的信号将处于pending状态,解除阻塞才进入递达状态。

忽略是递达后的状态和block不一样,忽略和自定义,默认是递达后三种处理方法

用户提供的方法可以覆盖handler数组的自定义方法

信号集类型sigset_t:封装好的位图

sigemptyset():初始化,并类图所有项都为0

sigaddset(sigset_t*set, int signum) 将位图的第signum位设为1

函数sigprocmask读取或者更改进程的信号屏蔽字。

修改当前进程的block位图

how的选项是

SIG_BLOCK:取位图交集

SIG_UNBLOCK:最后的set的block是参数set和old set共有的

SIG_SETMASK :覆盖

set:是新的位图

oldset是系统的位图

接口实操代码

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

using namespace std;

void PrintPending(sigset_t &pending)
{
    for(int signo=1;signo<=31;signo++)
    {
        if(sigismember(&pending,signo))
        {
            cout<<"1";
        }
        else
        {
            cout<<"0";
        }
    }
    cout<<endl;
    
}
void handler(int signo)
{
    cout<<"catch a signo: "<<signo<<endl;
}

int main()
{
    signal(2,handler);
   //对栈上的位图进行操作
    sigset_t bset,oset; //封装好的类图
    sigemptyset(&bset); //初始化类图
    sigaddset(&bset,2); //修改本地的类图
    //对阻塞的位图进行操作
    sigprocmask(SIG_SETMASK,&bset,&oset);
    sigset_t pending;
    int cnt=0;
    while(true)
    {
        int n=sigpending(&pending); //获取pending类图
        if(n<0)continue;
        PrintPending(pending);
        sleep(1);
        cnt++;
        if(cnt==20)
        {
            cout<<"unblock 2 signo"<<endl;
            sigprocmask(SIG_SETMASK,&oset,nullptr);
        }
    }
    // 打印pending
    // 发送2号信号 000...010

    return 0;
} 

利用mask可以把所有信号进程屏蔽,信号不就不会被处理。

信号捕捉处理

当我们的进程从内核态回到用户态进行信号的检测和处理

当系统调用时,操作系统会做身份切换的,用户身份变成内核身份,或者反着来

int 80 从用户态变成内核态

内核态:允许访问自己的系统代码和数据。

系统调用就是在1GB的地址空间进行执行的

操作系统视角:任何一个时刻,都会有进程执行,执行操作系统的代码就可以随时执行

操作系统的本质:基于时间中断的死循环,有一个时钟芯片,发送时间中断,驱动操作系统进行调度。

ecs寄存器有两个标志比特位 00 表示内核态,用户态是11,当切换到内核态时,才能访问内核代码。int 80陷入80

do_signal()检测信号

进入到用户态执行方法,如果是系统方法,再进行系统态。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android 日志原理解析

一、Logcat 二、Dumpsys C:\Users\pengcheng.ding>adb shell dumpsys --help usage: dumpsysTo dump all services. or:dumpsys [-t TIMEOUT] [--priority LEVEL] [--clients] [--dump] [--pid] [--thread] [--help | -l | --skip SERVICES | SERVICE [ARGS]]--help: show…

学生护眼台灯哪种好?揭秘央视公认好用的护眼台灯

现在近视已经成为了普遍的现象&#xff0c;尤其是学生群体&#xff0c;究其原因主要还是长期是电子设备、长时间的用眼疲劳以及不合适的用光环境&#xff0c;很多时候我们不经意的错误习惯都会导致不知不觉中近视。尤其是桌面上的那一盏台灯&#xff0c;如果台灯的质量太差也是…

Java批量操作文件系统

一、实验内容 编写一个文件管理器&#xff0c;实现文件的批量操作。文件管理器具体功能要求如下&#xff1a; 1、用户输入指令1&#xff0c;代表“指定关键字检索文件”&#xff0c;此时需要用户输入检索的目录和关键字&#xff0c;系统在用户指定的目录下检索出文件名中包含…

DataGrip(IDEA 内置)连接 SQL Server

原文&#xff1a;https://blog.iyatt.com/?p14265 测试环境&#xff1a; IDEA 2023.1SQL Server 2022 首先打开 SQL Server 配置管理工具 启用 TCP/IP 打开 Windows 服务管理 在服务列表中找到 SQL Server&#xff08;MSSQLSERVER&#xff09;&#xff0c;右键重新启…

PostgreSQL 安装部署

文章目录 一、PostgreSQL部署方式1.Yum方式部署2.RPM方式部署3.源码方式部署4.二进制方式部署5.Docker方式部署 二、PostgreSQL部署1.Yum方式部署1.1.部署数据库1.2.连接数据库 2.RPM方式部署2.1.部署数据库2.2.连接数据库 3.源码方式部署3.1.准备工作3.2.编译安装3.3.配置数据…

Android视角看鸿蒙第一课(工程目录)

Android视角看鸿蒙第一课&#xff08;工程目录&#xff09; 导读 鸿蒙马上就来了&#xff0c;这个工作很有可能落到Android开发的头上&#xff0c;既是机遇也是挑战&#xff0c;希望能跟上时代的浪潮&#xff0c;迫不得已开始学习鸿蒙开发&#xff0c;顺带分享记录下 我的学…

新书速览|PyTorch语音识别实战(人工智能技术丛书)

实战语音唤醒、音频特征抽取、语音情绪分类、Whisper语音转换、鸟叫多标签分类、多模态语音文字转换 01 本书内容 《PyTorch语音识别实战》使用PyTorch 2.0作为语音识别的基本框架&#xff0c;循序渐进地引导读者从搭建环境开始&#xff0c;逐步深入到语音识别基本理论、算法以…

解决QMYSQL driver not loaded问题

前言 之前都是在Qt5.51上开发&#xff0c;连接mysql数据库一直没有问题&#xff0c;换到5.15.2后一直报错 一查才发现\5.15.2\msvc2019_64\plugins\sqldrivers目录下没有qsqlmysql了&#xff0c;5.5.1是有的&#xff0c;5.15.2是要自己编译的。。。 下载源码 安装qt的时候没…

阿里云游戏访问与下载加速解决方案

随着全球化的发展&#xff0c;越来越多的企业开始将业务扩展到海外市场。然而&#xff0c;海外市场的挑战也是显而易见的。例如在游戏企业进军海外市场的过程中&#xff0c;网络延迟是一个常见的问题。由于地理位置的限制&#xff0c;海外用户登录访问游戏和游玩时&#xff0c;…

阿里云服务器Ngnix配置SSL证书开启HTTPS访问

文章目录 前言一、SSL证书是什么&#xff1f;二、如何获取免费SSL证书三、Ngnix配置SSL证书总结 前言 很多童鞋的网站默认访问都是通过80端口的Http服务进行访问&#xff0c;往往都会提示不安全&#xff0c;很多人以为Https有多么高大上&#xff0c;实际不然&#xff0c;他只是…

虚拟机时间同步主机

1.查看是否设置同步 2.查看时区 date -R 0800 表示时区东八区 明显不对 执行指令&#xff1a; tzselect &#xff1b;找到亚洲-中国-北京 3.覆盖一下文件 复制文件到 /etc/localtime 目录下&#xff1a;#sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 4.重现查…

html css 导航栏 2

鼠标划过会向上移动改变颜色 html文件 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>导航栏</title><link rel"stylesheet" href"css/dhl1.css" /></head><body><div …

MongoDB系列之索引

索引 一、创建1、普通索引2、唯一索引3、复合索引二、查看三、删除四、执行计划explain五、TTL索引存在一张articles集合 一、创建 1、普通索引 db.articles.ensureIndex({name:1}) // 普通索引,1代表升序,-1代表倒序_id是默认索引 2、唯一索引 db.articles.ensureInde…

【JavaEE】_Spring MVC 项目单个及多个参数传参

目录 1. 传递单个参数 1.1 关于参数名的问题 2. 传递多个参数 2.1 关于参数顺序的问题 2.2 关于基本类型与包装类的问题 1. 传递单个参数 现创建Spring MVC项目&#xff0c;.java文件内容如下&#xff1a; package com.example.demo.controller;import org.springframewo…

NFTScan :什么是 ERC-404?深入解读 NFT 协议的未来

上月初&#xff0c;ERC-404 成为最首要热门的话题&#xff0c;ERC-404 是由 Pandora 团队在 2 月初为创作者和开发者等开源的实验性代币标准&#xff0c;其混合 ERC-20 / ERC-721 实现&#xff0c;具有原生流动性和碎片化等特点。伴随着早期的发展&#xff0c;越来越多参与者开…

Qt 类的前置声明和头文件包含

1. 在头文件中引入另一个类经常有两种写法 1&#xff09;前置声明 2&#xff09;头文件包含 #ifndef FRMCOUPLE2_H #define FRMCOUPLE2_H#include <QWidget> //头文件包含namespace Ui { class frmcouple2; }//前置声明&#xff1a;QPushButton frmchkeyboard…

QT----云服务器部署Mysql,Navicat连接1698 -Access denied for user ‘root‘@‘‘

阿里云有活动&#xff0c;白嫖了一年的新加坡轻量级服务器&#xff0c;有点卡&#xff0c;有时候要开梯子 白嫖300元优惠券 目录 1 安装启动Mysql服务2 更改连接权限2.1 Navicat连接报错1698 -Access denied for user root 3 qt连接云服务器数据库 1 安装启动Mysql服务 我使用…

Go-zero中分布式事务的实现(DTM分布式事务管理器,在一个APi中如何调用两个不同服务的rpc层,并保证两个不同服务之间的业务逻辑同时成功)

涉及到的相关技术 1.DTM分布式事务管理器,解决跨数据库、跨服务、跨语言栈更新数据的一致性问题。 2.SAGA事务模式,SAGA事务模式是DTM中常用的一种模式,简单易上手.(当然还有其它更多的事务模式,这里采用的SAGA只不过是其中一种较为简单的方法) 3.Go-zero框架,ETCD服务注册... …

虾皮、lazada店铺运营攻略,如何搭建高效、稳定的自养号测评系统

随着电子商务的蓬勃发展&#xff0c;越来越多的人选择在虾皮这样的电商平台上开设店铺&#xff0c;以实现创业梦想。但如何在众多店铺中脱颖而出&#xff0c;成为消费者的首选?本文将为您详细解答“怎么样做好虾皮店铺”&#xff0c;并提供一些实用的运营建议。 一、怎么样做…

Java工作需求后端代码--实现树形结构

加油&#xff0c;新时代打工人&#xff01; 前端页面 带树形结构的表格 最近在新项目上加班加点&#xff0c;下面是个实现树形结构的数据表格。 需求&#xff1a; 在前端页面表格中展示成树形结构的数据。 技术&#xff1a; 后端&#xff1a;Java、Mybatis-Plus、HuTool树形的…