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

Linux进程信号详解(二):信号产生

当前阶段一、通过终端按键产生信号1.1 基本操作CtrlC → SIGINTCtrl\ →SIGQUIT 可以发送终止信号Ctrl Z - SIGSTP 可以发送停止信号将当前前台进程挂起到后台设置所有信号都可以自定义捕捉 1.2 理解OS如何得知键盘有数据1.3 初步理解信号起源信号其实是从纯软件角度模拟硬件中断的行为只不过硬件中断是发给CPU而信号是发送给进程两者都有相似性但是层级不同二、调用系统命令向进程发信号kill命令可以给指定进程发送信号。# 方式1通过信号宏定义发送 kill -信号名 进程PID # 方式2通过信号编号发送推荐更通用 kill -信号编号 进程PID # 示例向PID为213784的进程发送SIGSEGV11号信号 kill -SIGSEGV 213784 kill -11 213784示例先运行一个后台死循环进程// deadloop.cc #include iostream #include unistd.h int main() { while(true) { sleep(1); } }g deadloop.cc -o deadloop ./deadloop # 后台运行 ps aux | grep deadloop # 查看PID假设是213784 kill -SIGSEGV 213784 # 发送段错误信号进程会收到SIGSEGV11号信号默认动作是终止并产生core dump。三、使用函数产生信号3.1 kill() 函数kill命令的底层实现可向任意进程需有对应权限发送任意信号。#include sys/types.h #include signal.h int kill(pid_t pid, int sig);作用给指定进程发送信号。返回值成功返回0失败返回-1。Makefile.PHONY:all all:testSig mykill testSig:testSig.cc g -o $ $^ -stdc11 mykill:mykill.cc g -o $ $^ -stdc11 .PHONY:clean clean: rm -f testSig mykillmykill.cc#include iostream #include sys/types.h #include signal.h #include string // ./mykill signumber pid int main(int argc, char *argv[]) { if (argc ! 3) { std::cout ./mykill signumber pid std::endl; return 1; } int signum std::stoi(argv[1]); pid_t target std::stoi(argv[2]); int n kill(target, signum); if (n 0) { std::cout send signum to target success. std::endl; } return 0; }testSig.cc#include iostream #include unistd.h #include signal.h #include sys/types.h #include unistd.h void handlerSig(int sig) { std::cout 获得了一个信号: sig std::endl; } int main() { signal(SIGINT,handlerSig); int cnt 0; while (true) { std::cout hello world, cnt , pid: getpid() std::endl; sleep(1); } return 0; }3.2 raise() 函数自己给自己发信号底层是调用kill(getpid(), sig)实现。#include signal.h int raise(int sig);作用给当前进程自己发送信号。返回值成功0失败非0。9 号信号无法被自定义捕捉把9号信号跳过去 查看是否还有其他信号无法被自定义捕捉把9号和 19号 信号跳过去 查看是否还有其他信号无法被自定义捕捉没有了 就只有 9号和 19 号无法自定义捕捉3.3 abort() 函数强制让进程异常终止无论是否捕捉 SIGABRT 信号进程最终都会终止捕捉后会先执行自定义逻辑再终止。#include stdlib.h void abort(void);关键特性无返回值总是会成功进程最终一定会异常终止。四、硬件异常产生信号4.1 除零异常 → SIGFPE// divzero.cc #include stdio.h #include signal.h void handler(int sig) { printf(catch a sig : %d\n, sig); } int main() { // signal(SIGFPE, handler); // 取消注释可捕捉 int a 10; a / 0; // 除零错误 while(1); return 0; }默认情况下进程会收到SIGFPE8号信号并终止。如果捕捉了该信号会一直打印“catch a sig : 8” —— 为什么一直打印因为CPU的状态寄存器中除零标志位没有被清除每次从异常处理返回后再次执行除零指令又会触发异常形成循环。4.2 野指针 → SIGSEGV// segv.cc #include stdio.h #include signal.h void handler(int sig) { printf(catch a sig : %d\n, sig); } int main() { // signal(SIGSEGV, handler); int *p NULL; *p 100; // 向NULL地址写入非法内存访问 while(1); return 0; }默认产生段错误SIGSEGV11号信号。捕捉后也会一直打印因为MMU异常状态未清除。核心结论C/C中的除零、野指针等异常在系统层面都是通过信号来通知进程的。4.3 硬件异常与信号的对应关系异常类型典型代码产生的信号信号值默认行为除零错误a / 0;SIGFPE8终止 Core野指针/段错误*p 100; // pnullptrSIGSEGV11终止 Core非法指令执行损坏的二进制代码SIGILL4终止 Core总线错误内存对齐错误SIGBUS7终止 Core浮点异常浮点溢出/下溢SIGFPE8终止 Core断点调试int 3指令SIGTRAP5终止 CoreCore表示会产生 core dump 文件用于调试分析。4.4 核心问题OS 怎么知道硬件异常了前置知识信号全部都是由操作系统发送的 。硬件层面的检测机制关键组件CPU 寄存器与状态组件作用EFLAGS 标志寄存器记录运算结果状态溢出、零标志、符号标志等CR0 控制寄存器控制 CPU 操作模式包含异常使能位CR2 寄存器页故障时保存导致故障的线性地址CR3 寄存器保存页目录表物理地址MMU 使用IDT 中断描述符表存储异常处理程序的入口地址4.5 操作系统如何识别谁犯了错当前进程上下文

相关文章:

Linux进程信号详解(二):信号产生

当前阶段:一、通过终端按键产生信号1.1 基本操作CtrlC → SIGINTCtrl\ → SIGQUIT 可以发送终止信号Ctrl Z -> SIGSTP 可以发送停止信号,将当前前台进程挂起到后台设置所有信号都可以自定义捕捉 : 1.2 理解OS如何得知键盘有数据1.3 初步理…...

镜像是什么?怎么用?解决下载慢的终极指南

作为计算机小白,最头疼的事莫过于下载软件——明明点击了下载,速度却慢得像蜗牛,动辄几KB/s,下一个几百MB的软件要等大半天,甚至中途断开重新来;偶尔听大佬说“用国内镜像啊”,却一脸懵&#xf…...

vscode下载+插件

作为一款轻量又强大的代码编辑器,VSCode 是程序员入门的必备工具,但很多新手第一步就卡在了下载慢、不知怎么下的问题上。这篇指南从官方下载、国内加速下载,到简单的安装注意事项进行讲述。 一、下载 VSCode 的官方下载渠道唯一且安全&…...

Go语言的Kubernetes编排实践

Go语言的Kubernetes编排实践 1. Kubernetes简介 Kubernetes(简称K8s)是一个开源的容器编排平台,用于自动化容器的部署、扩展和管理。它提供了强大的容器编排能力,使应用程序能够在分布式环境中高效运行。 1.1 Kubernetes的核心概念…...

Go语言的Docker容器化部署

Go语言的Docker容器化部署 1. Docker简介 Docker是一种容器化技术,它允许将应用程序及其依赖项打包到一个轻量级、可移植的容器中,然后在任何支持Docker的环境中运行。Docker的出现大大简化了应用的部署和管理过程,特别是在微服务架构中。 Do…...

Go语言的分布式事务处理

Go语言的分布式事务处理 1. 分布式事务简介 在分布式系统中,事务处理变得更加复杂。传统的单机事务可以通过数据库的ACID特性来保证一致性,但在分布式环境中,由于网络延迟、节点故障等因素,确保多个服务之间的数据一致性成为一个挑…...

电磁波衰减在气象雷达探测中的关键影响与优化策略

1. 电磁波衰减如何影响气象雷达的"视力" 想象一下你戴着沾满雨滴的眼镜看世界——视线模糊、细节丢失、距离判断失误。气象雷达遭遇电磁波衰减时,面临的正是类似的困境。当雷达发射的电磁波穿越雨雪云层时,能量就像被层层"抽成"&…...

瑞芯微RK3588硬件设计资料概览

瑞芯微RK3588硬件设计资料 瑞芯微RK3588硬件设计资料资料包括:原理图和PCB以及叠层设计说明,硬件设计指导书等原理图和pcb用cadence打开该原理图和pcb基于网络硬盘录像机项目设计可作为RK3588学习者作为参考电路使用,或者学习高速电路者学习使…...

如何彻底关闭Elasticsearch 7.x的安全警告提示(内网开发必备)

彻底关闭Elasticsearch 7.x安全警告的实战指南 每次启动Elasticsearch时,控制台不断刷新的安全警告是否让你感到烦躁?特别是在内网开发环境中,这些红色警告既不影响功能又无法忽略。本文将带你深入理解警告产生的机制,并提供三种不…...

银河麒麟kylin.desktop-generic编译程序执行权限问题深度解析与实战解决方案

1. 银河麒麟权限问题的现象与本质 最近在银河麒麟kylin.desktop-generic环境下开发时,遇到了一个让人头疼的问题:明明用gcc编译生成的可执行文件已经显示有x权限,运行时却提示"权限不够"。这种看似矛盾的报错,其实是银河…...

PADS 铜箔区域规则与技巧

铜箔一定要非直角 直角会向外辐射 然后能走直线不走斜线方显布局的落落大方铜箔布好后可以选择任选去选择铜箔的边沿去拉它的形状 还可以通过打断去让他多几个拐点直接分割一个...

终极宝可梦随机化指南:Universal Pokemon Randomizer ZX 完全使用教程

终极宝可梦随机化指南:Universal Pokemon Randomizer ZX 完全使用教程 【免费下载链接】universal-pokemon-randomizer-zx Public repository of source code for the Universal Pokemon Randomizer ZX 项目地址: https://gitcode.com/gh_mirrors/un/universal-po…...

教育科技赋能自主学习:JiYuTrainer的平衡之道与效率提升方案

教育科技赋能自主学习:JiYuTrainer的平衡之道与效率提升方案 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer 教学管控与学习自由的平衡难题 在数字化教育普及的今天&…...

comsol方形锂电池电化学—热耦合模型充放电循环热仿真,三种模型 一维电化学模型耦合三维方形...

comsol方形锂电池电化学—热耦合模型充放电循环热仿真,三种模型 一维电化学模型耦合三维方形铝壳电池模型 还包括电池组风冷、相变散热模型最近在折腾方形锂电池的充放电热仿真,发现电化学和热耦合的坑比想象中深。尤其是当一维电化学模型要和三维结构联…...

文章标题:基于高阶温度补偿的低温漂带隙基准电压源设计

带隙基准&#xff0c;超低温漂&#xff0c;1.9&#xff0c;高电源抑制比&#xff0c;低功耗&#xff0c;高阶温度补偿带隙基准&#xff0c;cadence 低温漂基准电压源设计 ppm&#xff1a;1.9 PVT下&#xff0c;ppm<20 psrr&#xff1a;-90dB&#xff0c;0~100kHz 电流&…...

降AI率工具8元和3元的,处理80%+有区别吗

“8元一千字太贵了&#xff0c;3元那个不是也能用吗&#xff1f;” 这个问题很合理&#xff0c;特别是对于字数多的毕业论文&#xff0c;价格差距相当可观。 4万字的论文&#xff1a; 8元工具&#xff1a;320元3元工具&#xff1a;约130元 差了190元。那这190元换来的是什么…...

linux——PV操作

int semop(int semid ,struct sembuf *sops ,size_t nsops); //用户改变信号量的值。也就是使用资源还是释放资源使用权 包含头文件&#xff1a; include<sys/sem.h> 参数&#xff1a; semid : 信号量的标识码。也就是semget&#xff08;&#xff09;的返回值 sops是一…...

从销售预测到异常检测:时间序列分解在业务中的5个高能应用场景

时间序列分解&#xff1a;驱动业务决策的5个实战场景解析 当电商平台的库存经理面对双十一前暴涨的销售曲线时&#xff0c;当数据中心运维工程师盯着突然飙升的服务器指标时&#xff0c;他们需要的不是数学公式的推导&#xff0c;而是能直接指导行动的时序洞察。时间序列分解技…...

【RAG】【vector_stores002】Google AlloyDB for PostgreSQL 向量存储完整案例

本案例演示如何使用 LlamaIndex 与 Google AlloyDB for PostgreSQL 集成&#xff0c;实现向量存储和检索功能&#xff0c;用于构建基于文档的问答系统。1. 案例目标本案例的主要目标是&#xff1a;设置 AlloyDB 向量存储&#xff1a;配置 LlamaIndex 以使用 Google AlloyDB for…...

【RAG】【vector_stores001】阿里云OpenSearch向量存储完整案例

本案例演示如何使用 LlamaIndex 与阿里云 OpenSearch 向量搜索版集成&#xff0c;实现向量存储和检索功能&#xff0c;用于构建基于文档的问答系统。1. 案例目标本案例的主要目标是&#xff1a;设置阿里云 OpenSearch 向量存储&#xff1a;配置 LlamaIndex 以使用阿里云 OpenSe…...

UG NX 在曲面上生成文字

在UG NX中&#xff0c;在曲面上生成文字通常有两种方法&#xff1a;“面上”文本&#xff08;直接贴合&#xff09;和“曲线”文本投影。方法一&#xff1a;使用“面上”文本&#xff08;直接生成&#xff0c;最常用&#xff09; 这种方法生成的字是直接“长”在曲面上的&#…...

Java全栈工程师的面试实战:从技术细节到业务场景

Java全栈工程师的面试实战&#xff1a;从技术细节到业务场景 在一次真实的互联网大厂Java全栈开发岗位的面试中&#xff0c;一位名叫李明的候选人&#xff0c;年龄28岁&#xff0c;拥有计算机科学与技术硕士学历&#xff0c;工作年限为5年。他曾在一家知名的电商公司担任全栈开…...

双偏振雷达数据质控:核心算法原理与 Python 实现

双偏振雷达作为气象观测核心设备&#xff0c;可同步获取Z、V、W及Zdr、Фdp、Kdp、ρhv等多维度参量&#xff0c;为降水监测、灾害预警提供精准数据支撑。但受接收机性能偏差、电磁干扰、地物 / 晴空杂波等因素影响&#xff0c;原始双偏振参量存在大量噪声、异常值&#xff0c;…...

避开带宽陷阱:用低成本示波器搞定MIPI CSI-2信号的眼图与时序分析

避开带宽陷阱&#xff1a;用低成本示波器搞定MIPI CSI-2信号的眼图与时序分析 当你手头只有一台几百MHz带宽的示波器&#xff0c;却要分析动辄上Gbps的MIPI CSI-2高速信号时&#xff0c;是否感到无从下手&#xff1f;别担心&#xff0c;这篇文章将带你突破硬件限制&#xff0c;…...

AI逆向实战:构建MCP工具链赋能Cursor自动化App动态分析

1. 为什么需要AI辅助App逆向分析 逆向工程一直是安全研究和移动应用开发中的重要环节。传统的逆向流程通常需要手动操作adb命令、反编译工具、抓包软件等&#xff0c;不仅效率低下&#xff0c;而且对操作者的技术要求极高。我曾在一次商业App的安全评估中&#xff0c;花了整整三…...

保姆级教程:用ms-swift微调Qwen3-Embedding-0.6B,搞定文本相似度任务

从零构建文本语义搜索系统&#xff1a;基于Qwen3-Embedding的实战指南 当我们需要在海量文本中快速找到相关内容时&#xff0c;传统的关键词匹配已经力不从心。想象一下电商平台的智能推荐、客服系统的FAQ自动匹配&#xff0c;或是法律文档的相似案例检索——这些场景都需要理解…...

weixin284同城家政服务+ssm(文档+源码)_kaic

第4章 系统功能模块实现 本章是把系统中的主要功能模块进行详细阐述&#xff0c;包含功能模块实现界面的截图。 4.1 系统管理员的功能模块实现 4.1.1系统管理员的登录功能模块的实现 管理员登录的功能模块是采用验证的方法进行设计&#xff0c;对系统的安全起到重要作用&…...

weixin283基于微信小程序校园订餐的设计与开发+ssm(文档+源码)_kaic

第5章 系统实现 5.1用户登录功能的界面实现 本系统中可以保证安全的功能就是用户登录功能&#xff0c;登录可以验证用户的身份&#xff0c;用户可以注册&#xff0c;当密码忘记后也可以通过忘记密码功能进行找回。在用户登录界面里采用上中下的方式进行设计。在上设计的是功能…...

2025届学术党必备的十大降AI率网站推荐榜单

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 为对付维普系统含有对AI生成内容的识别机制&#xff0c;若想降低AI生成内容被识别的风险&am…...

大功率H桥电机驱动板电路设计方案 - ir2103驱动芯片应用方案

大功率H桥电机驱动板电路设计方案 此大功率直流电机驱动板采用ir2103驱动芯片&#xff0c;可同时驱动两路电机&#xff0c;使用10m高速光耦对控制信号进行隔离&#xff0c;最大额定电流可达100A&#xff0c;方案包括&#xff1a;硬件原理图&#xff0c;PCB(可直接打样测试)&…...