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

linux(信号结尾)

目录:

            1.可重入函数

            2.volatile关键字

            3.SIGCHLD信号

--------------------------------------------------------------------------------------------------------------------------------

1.可重入函数----------用来描述一个函数的特点的

1.在单进程当中也存在多执行流的情况

实际上,当我们正常正在执行我们的进程代码逻辑时,因为我们的系统调用、时间片到了,等等可能的因素,导致我们由用户态的身份转为内核态的身份,当我从内核返回用户态时,我要做信号检测,检测时,我就可能执行信号捕捉,当我执行信号捕捉时,它可能进入到了另一种执行流,那么我返过来说,我进程的生命执行流当中,没有收到过任何信号,就说明我信号捕捉函数不会被调用,换言之我可能只执行我main函数的代码,也可能因为我收到信号时,我进程跑过去执行信号捕捉流程的代码-----------所以在单进程当中也存在多执行流的情况(两个执行流是毫不相关的)

第一步:

第二步: 我去处理我信号,我信号捕捉函数里也进行了insert,我在signohandler方法里也插入我node2   ...............

最后我们这样子就会导致一个小问题  :

一旦我head执行node2,现在我用node‘1的动地址去覆盖head,此时我们对应的node’2节点就找不到了,节点丢失

导致上面的问题原因很简单就是当我一个主执行流,正在执行我insert,插入的时候,突然因为信号的到来,导致我们进入信号捕捉执行流了,在捕捉函数里我insert被调用了

这种现象我们成为  insert函数被重复进入了

insert函数一旦重入,有可能出现问题    ---   该函数不可被重入

insert函数一旦重入,不会出现问题       ----  该函数可重入函数

-----------------------------------------------------------------------------------------------------------------------------

2.volatile关键字

 

 可是在我们的认识当中,我们需要介绍一个非常重要的概念!!!

我们上面的编译器是属于非常常规的情况,我们刚刚看到的现象是没问题的

但是我们的编译器是可以优化我们程序的---我们是可以自己设定编译器的优化级别的(gcc当中是有  大O0   到    大O4          这个优化级别的)

意味着flag的值永远是0,怎么理解的呢??

一般这个flag是全局变量,是变量,在进程运行时就应该在内存开辟空间,换句话说,CPU要识别flag就必须从内存里读flag,读到CPU内,在CPU内做判断,判断完之后,在继续从内存拿flag读到CPU内做判断,不断循环的过程,这样不断的检测flag的值

但是在编译器发现在main函数当中没有人对flag做修改,直接对你的flag优化到CPU寄存器当中,此时不在对你的内存做访问了,直接识别你的CPU寄存器相关的信息

怎么去解决这个问题呢??

 -----------------------------------------------------------------------------------------------------------------------------

这是我们main的执行流认为

 但是我们收到信号,执行信号捕捉的时候,它内部修改了flag,但是它内存修改的flag并不是CPU上的flag,而是内存当中flag,我main函数的执行流又不从内存当中读你的flag了,而是直接用CPU当中寄存器存的那个flag

volatile作用:告诉编译器,不要对我这个变量做任何优化,读取必须贯穿式读取内存,不要读取中间缓冲区寄存区中的。(保持内存的可见性)

3.SIGCHLD信号

子进程退出不是悄悄摸摸的退出了,而是子进程退出的时候,会向父进程发送SIGCHID信号

父进程对SIGCHID信号默认动作是忽略的!!!

 

如果我父进程不想回收子进程(换而言之就是我不想让子进程产生僵尸状态)呢??

 

相关文章:

linux(信号结尾)

目录: 1.可重入函数 2.volatile关键字 3.SIGCHLD信号 -------------------------------------------------------------------------------------------------------------------------------- 1.可重入函数----------用来描述一个函数的特点的 1.在单进程当中也存…...

【漏洞修复】node-exporter被检测出来pprof调试信息泄露漏洞

node-exporter被检测出来pprof调试信息泄露漏洞 说在前面解决方法结语 说在前面 惯例开篇吐槽,有些二五仔习惯搞点自研的安全扫描工具,然后加点DIY元素,他也不管扫的准不准,就要给你报个高中危的漏洞,然后就要去修复&…...

在linux 上安装 NFS服务器软件

在 Ubuntu Linux 中创建 NFS 文件系统通常需要完成以下步骤: 安装 NFS 服务器软件。您可以在终端上使用以下命令来安装所需的软件包。sudo apt-get update sudo apt-get install nfs-kernel-server创建要共享的目录。例如,您可以创建一个名为 /var/nfs/shared 的目录。sudo m…...

网卡中的Ring buffer -- 解决 rx_resource_errors 丢包

1、软硬件环境 硬件&#xff1a; 飞腾E2000Q 平台 软件&#xff1a; linux 4.19.246 2、问题现象 网卡在高速收包的过程中&#xff0c;出现 rx error , 细查是 rx_resource_errors 如下&#xff1a; rootE2000-Ubuntu:~# ifconfig eth1 eth1: flags4163<UP,BROADCAST,RU…...

六月九号补题日记:Codeforces Round 877 (Div. 2)

专注是不够的&#xff0c;很重要的一方面在于细节&#xff0c;关注细节&#xff1a;精细和专注才是成功的重点&#xff01;&#xff01;&#xff01; A 题意&#xff1a;给你一堆数字&#xff0c;说这一堆数字是由最初的两个数字相减得到的&#xff0c;让你求出两个数字其中一…...

python基础选择题,高中适用

1. 下面哪个是 Python 的注释符号&#xff1f; A. // B. # C. /* D. ; 答案&#xff1a;B 2. 下面哪个是 Python 的赋值运算符&#xff1f; A. B. C. ! D. > 答案&#xff1a;A 3. 下面哪个是 Python 的逻辑运算符&#xff1f; A. && B. || C. ! D. & 答…...

Linux 面试题-(腾讯,百度,美团,滴滴)

Linux 面试题-(腾讯,百度,美团,滴滴) 分析日志t.log(访问量)&#xff0c;将各个ip 地址截取&#xff0c;并统计出现次数,并按从大到小排序(腾讯) http://192.168.200.10/index1.html http://192.168.200.10/index2.html http://192.168.200.20/index1.html http://192.168.20…...

DDD--战略设计步骤

在领域驱动设计&#xff08;Domain-Driven Design&#xff0c;DDD&#xff09;中&#xff0c;战略设计是指在系统的整体层面上考虑领域模型的组织和架构。下面是一些战略设计的详细步骤&#xff1a; 确定限界上下文&#xff08;Bounded Context&#xff09;&#xff1a;首先&a…...

Web Scoket简述

Web Socket 简介 初次接触 Web Socket 的人&#xff0c;我们已经有了 HTTP 协议&#xff0c;为什么还需要另一个协议&#xff1f;它能带来什么好处&#xff1f; 因为 HTTP 协议有一个缺陷&#xff1a;通信只能由客户端发起。http基于请求响应实现。 &#xff08;准确来说HTTP…...

“Docker 技术在企业中的应用及挑战解决方案“

Docker 技术是一种基于容器化的应用部署和管理技术。随着云计算的普及和应用的不断增多&#xff0c;Docker 技术在企业中的应用越来越广泛。本文将介绍 Docker 技术的基本概念、优势和应用场景&#xff0c;并讨论如何在企业中应用 Docker 技术。 一、Docker 技术概述 Docker …...

vue中开发包、生产包、全局包的区别以及安装语法

目录 开发包 (devDependencies) 安装方法 生产包 (dependencies) 安装方法 全局包 (Global build) 安装方法 vue中有三种不同类型的包&#xff1a;开发包 (Development build)&#xff0c;生产包 (Production build) 和全局包 (Global build)。下面我们分别解释它们的区别…...

list的模拟实现

前言 list是STL中重要的容器&#xff0c;了解它的原理对于我们掌握它是有很多的帮助的&#xff0c;一般list和vector都是一起来使用的&#xff0c;因为它们的优缺点不同&#xff0c;刚好可以互补。list的优点是任意位置的插入和删除都很快&#xff0c;它的缺点是不支持随机访问…...

ChatGLM简介和SSE聊天接口测试效果

开发公司 智谱AI是由清华大学计算机系技术成果转化而来的公司&#xff0c;致力于打造新一代认知智能通用模型。公司合作研发了双语千亿级超大规模预训练模型GLM-130B&#xff0c;并构建了高精度通用知识图谱&#xff0c;形成数据与知识双轮驱动的认知引擎&#xff0c;基于此模型…...

darknet yolo标注、训练详细说明

文章目录 1、标注数据1.1、标注1.2、生成训练列表文件train.txt1.3、转换数据标注格式 2、训练数据整理2.1、修改train.txt路径2.2、修改yolov3.cfg2.3、obj.name和obj.data2.4、训练脚本文件trian.sh2.5、测试脚本文件test.sh 3、训练 本文对应的脚本文件和程序下载链接 darke…...

chatgpt赋能python:Python如何产生随机整数?

Python如何产生随机整数&#xff1f; Python是一种高级编程语言。它允许程序员轻松地创建各种类型的应用程序&#xff0c;包括生成随机整数。本文将介绍如何在Python中使用内置的随机数函数来生成随机整数。 random模块 Python中的random模块提供了生成随机数的函数。这些函…...

大话Stable-Diffusion-Webui-客制化主题(四)

文章目录 目标效果开始重要说明单选框以及复选框图标样式更改gradio主题构建器上传主题方式代码上传主题方式目标 在DIY的主题中更改gradio单选框组件以及复选框组件的勾选后图标样式 效果 开始 笔者在使用gradio的主题构建器的过程中发现,gradio的复选框以及单选框组件勾选…...

Excel函数VLOOKUP常用方法

一、基础用法 1、精确匹配 公式&#xff1a;VLOOKUP(待匹配值&#xff0c;查找范围&#xff0c;范围列数&#xff0c;查找方式) 定义好要输出表的表头和第一列&#xff0c;第一列即为要查找和匹配的父内容&#xff0c;在第二列输入公式&#xff0c;被查找表中一定也要将待查…...

systemV的工作原理+原理代码

概念 我们知道进程间的通信有管道的方式进程通信管道制作_云的小站的博客-CSDN博客 但是我们的管道通信其实属于一种取巧的方式&#xff0c;利用了打开的文件可读写的特性上&#xff0c;两个进程对此分别进行读写操作就会产生所谓的通信现象&#xff0c;但是外面的管道依旧得…...

Kubeflow--TFJob实现机制学习

2023暑期学习 TF Job实际场景应用Vertex AI TF Job 链接 https://www.kubeflow.org/docs/components/training/tftraining/ https://developer.aliyun.com/article/601779 TFJob实际上遵循Kubernetes标准的API定义. TFJob 对象 apiVersion --> string --> api版本&…...

百度出品,Nature重磅 -- 优化的mRNA设计算法可改善mRNA的稳定性和免疫原性

摘要 尽管mRNA疫苗已用于COVID-19的预防&#xff0c;但仍然面临不稳定和易降解的风险&#xff0c;这是mRNA疫苗存储、配送、效价等面临的重要障碍。先前的研究已表明&#xff0c;增加二级结构可延长mRNA的半衰期&#xff0c;再加上选择优化的密码子&#xff0c;可改善蛋白表达。…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制&#xff0c;展现出显著的技术优势&#xff1a; 深层组织穿透能力&#xff1a;适用于活体组织深度成像 高分辨率观测性能&#xff1a;满足微观结构的精细研究需求 低光毒性特点&#xff1a;减少对样本的损伤…...

2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版

1.题目描述 2.思路 当前的元素可以重复使用。 &#xff08;1&#xff09;确定回溯算法函数的参数和返回值&#xff08;一般是void类型&#xff09; &#xff08;2&#xff09;因为是用递归实现的&#xff0c;所以我们要确定终止条件 &#xff08;3&#xff09;单层搜索逻辑 二…...

免费批量Markdown转Word工具

免费批量Markdown转Word工具 一款简单易用的批量Markdown文档转换工具&#xff0c;支持将多个Markdown文件一键转换为Word文档。完全免费&#xff0c;无需安装&#xff0c;解压即用&#xff01; 官方网站 访问官方展示页面了解更多信息&#xff1a;http://mutou888.com/pro…...

NineData数据库DevOps功能全面支持百度智能云向量数据库 VectorDB,助力企业 AI 应用高效落地

NineData 的数据库 DevOps 解决方案已完成对百度智能云向量数据库 VectorDB 的全链路适配&#xff0c;成为国内首批提供 VectorDB 原生操作能力的服务商。此次合作聚焦 AI 开发核心场景&#xff0c;通过标准化 SQL 工作台与细粒度权限管控两大能力&#xff0c;助力企业安全高效…...

Vue.js教学第二十一章:vue实战项目二,个人博客搭建

基于 Vue 的个人博客网站搭建 摘要: 随着前端技术的不断发展,Vue 作为一种轻量级、高效的前端框架,为个人博客网站的搭建提供了极大的便利。本文详细介绍了基于 Vue 搭建个人博客网站的全过程,包括项目背景、技术选型、项目架构设计、功能模块实现、性能优化与测试等方面。…...

HarmonyOS-ArkUI 自定义弹窗

自定义弹窗 自定义弹窗是界面开发中最为常用的一种弹窗写法。在自定义弹窗中&#xff0c; 布局样式完全由您决定&#xff0c;非常灵活。通常会被封装成工具类&#xff0c;以使得APP中所有弹窗具备相同的设计风格。 自定义弹窗具备的能力有 打开弹窗自定义布局&#xff0c;以…...