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

【C++上层应用】6. 信号 / 中断

文章目录

  • 【 1. signal 函数 】
  • 【 2. raise函数 】

  • 信号是由操作系统传给进程的 中断,会提早终止一个程序。在 UNIX、LINUX、Mac OS X 或 Windows 系统上,可以通过按 Ctrl+C 产生中断。
  • 有些信号不能被程序捕获,但是下表所列信号可以在程序中捕获,并可以基于信号采取适当的动作。这些信号是定义在 C++ 头文件\ 中。
信号描述
SIGABRT程序的异常终止,如调用 abort。
SIGFPE错误的算术运算,比如除以零或导致溢出的操作。
SIGILL检测非法指令。
SIGINT接收到交互注意信号。
SIGSEGV非法访问内存。
SIGTERM发送到程序的终止请求。

【 1. signal 函数 】

  • C++ 信号处理库提供的 signal 函数用来捕获突发事件
  • 不管我们想在程序中捕获什么信号,必须使用 signal 函数来注册信号,并将其与信号处理程序相关联
  • 以下是 signal() 函数的形式:
void (*signal (int sig, void (*func)(int)))(int); 
/*
第一个参数是一个整数,代表了信号的编号;
第二个参数是一个指向信号处理函数的指针。
*/
  • 实例
    使用 signal() 函数捕获 SIGINT 信号。
#include <iostream>
#include <csignal>
#include <windows.h>using namespace std;void signalHandler( int signum )
{cout << "Interrupt signal (" << signum << ") received.\n";// 清理并关闭// 终止程序  exit(signum);  }int main ()
{// 注册信号 SIGINT 和信号处理程序signal(SIGINT, signalHandler);  while(1){cout << "Going to sleep...." << endl;Sleep(1);}return 0;
}

代码被编译和执行时,它会产生下列结果:
在这里插入图片描述
按 Ctrl+C 来中断程序,程序会捕获信号,程序打印如下内容并立刻退出:

Going to sleep....
Going to sleep....
Going to sleep....
Interrupt signal (2) received.

【 2. raise函数 】

  • raise() 函数用于生成信号,该函数带有一个整数信号编号作为参数,函数形式如下:
int raise (signal sig);
/*
sig 是要发送的信号的编号,
这些信号包括:SIGINT、SIGABRT、SIGFPE、SIGILL、SIGSEGV、SIGTERM、SIGHUP。
*/
  • 实例:
    使用 raise() 函数内部生成信号。
#include <iostream>
#include <csignal>
#include <unistd.h>using namespace std;void signalHandler( int signum )
{cout << "Interrupt signal (" << signum << ") received.\n";// 清理并关闭// 终止程序 exit(signum);  }int main ()
{int i = 0;// 注册信号 SIGINT 和信号处理程序signal(SIGINT, signalHandler);  while(++i){cout << "Going to sleep...." << endl;if( i == 3 ){raise( SIGINT);}sleep(1);}return 0;
}

在这里插入图片描述

相关文章:

【C++上层应用】6. 信号 / 中断

文章目录 【 1. signal 函数 】【 2. raise函数 】 信号是由操作系统传给进程的 中断&#xff0c;会提早终止一个程序。在 UNIX、LINUX、Mac OS X 或 Windows 系统上&#xff0c;可以通过按 CtrlC 产生中断。有些信号不能被程序捕获&#xff0c;但是下表所列信号可以在程序中捕…...

树与二叉树堆:堆的意义

目录 堆的意义&#xff1a; 第一是堆的排序&#xff0c;第二是堆的top k 排行问题 堆的 top k 排行问题&#xff1a; 面对大量数据的top k 问题&#xff1a; 堆排序的实现&#xff1a;——以升序为例 方法一 交换首尾&#xff1a; 建立大堆&#xff1a; 根结点尾结点的…...

什么时候适合做ui自动化测试?什么时候做接口自动化测试

UI自动化测试和接口自动化测试都是软件测试中非常重要的部分&#xff0c;它们各自有适合的应用场景。 适合做UI自动化测试的场景包括&#xff1a; 用户界面&#xff08;UI&#xff09;变化频繁的应用程序。需要测试用户交互和流程的应用程序。需要验证页面布局、样式和交互的…...

[ABC261E] Many Operations(dp,位运算,打表)

[ABC261E] Many Operations - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) Problem Statement We have a variable X and N kinds of operations that change the value of X. Operation i is represented as a pair of integers (Ti​,Ai​), and is the following operati…...

一、爬虫-爬取豆瓣电影案例

1、环境配置 你需要一个pycharm和requests第三方库&#xff0c;在安装完成之后即可继续浏览。 2、操作流程 &#xff08;1&#xff09;打开豆瓣电影网站&#xff0c;点击排行榜&#xff0c;点击喜剧&#xff0c;检查 &#xff08;2&#xff09;可以看到鼠标每次下移&#xff0…...

4G5G防爆执法记录仪、防爆智能安全帽赋能智慧燃气,可视化巡检巡线,安全生产管控

随着燃气使用的普及&#xff0c;燃气安全问题日益突出。传统应急安全问题处理方式暴露出以下问题&#xff1a; 应急预案不完善&#xff1a;目前一些燃气企业的应急预案存在实用性不高、流程不清晰等问题&#xff0c;导致在紧急情况下难以迅速启动和有效执行。 部门协同不流畅…...

武汉数字孪生赋能工业制造,加速推进制造业数字化转型

随着数字孪生技术的不断推进&#xff0c;互联网、物联网、智能传感技术开始应用到数控机床的远程服务&#xff0c;状态监控&#xff0c;故障诊断&#xff0c;维护管理等方面。武汉数字孪生是在虚拟空间中创建物理对象的高保真虚拟模型&#xff0c;以模拟其在现实世界中的行为提…...

安卓密码框、EditText

目录 1. 基础使用 2. 密码的展示与隐藏 (1) 使用setTransformationMethod方法 (2) 使用setInputType方法 3. imeOptions属性 4. 单行设置 在安卓中使用密码框普遍采用EditText设置inputType"textPassword"的方式。 1. 基础使用 <EditTextandroid:id"…...

ROS命令行工具

1、roscore 在使用ROS之前&#xff0c;首先要启动roscore进程。当我们在终端中运行这个命令时&#xff0c;系统就会启动ROS Master、参数服务器和日志节点。在这之后&#xff0c;就可以运行任何其他的ROS程序&#xff0f;节点了。所以可以在一个终端窗口运行roscore指令&#…...

深入浅出 Golang 中的直接依赖和间接依赖管理

目录 引言 直接依赖 间接依赖 为什么需要间接依赖&#xff1f; 如何管理间接依赖&#xff1f; 小结 引言 Golang 中的依赖管理是使用 go mod 进行管理的。go mod 是 Golang 官方推出的依赖管理工具&#xff0c;可以帮助开发者管理项目的依赖关系&#xff0c;确保项目代码…...

深入Python元编程:了解声明与初始化定制元类

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 简介 在Python中&#xff0c;元编程是指在运行时创建或定制类的编程。元类是Python中最强大的元编程工具之一&#xff0c;允许您控制类的创建过程。元类是类的类&#xff0c;它控制类的实例化&#xff0c;允许您…...

[传智杯初赛] 期末考试成绩

传智专修学院的 Java 程序设计课程的评价体系是这样的&#xff1a; 首先&#xff0c;所有学生会有一个卷面得分&#xff0c;这个得分一定是一个 [0,100][0,100] 之间的整数。 如果卷面得分在 9090 分及以上&#xff0c;那么他的 GPA&#xff08;加权平均成绩&#xff09; 就是…...

Linux 常用基本命令

文章目录 7.1 帮助命令7.1.1 man 获得帮助信息7.1.2 help 获得shell内置命令的帮助信息7.1.3 常用快捷键 7.2 文件目录类7.2.1 pwd 显示当前工作目录的绝对路径7.2.2 ls 列出目录的内容7.2.3 cd 切换目录7.2.4 mkdir 创建一个新的目录7.2.5 rmdir 删除一个空的目录7.2.6 touch …...

阿里云语雀频繁崩溃,有什么文档管理工具是比较稳定的?

10月23 日14:00左右&#xff0c;蚂蚁集团旗下的在线文档编辑与协同工具语雀发生服务器故障&#xff0c;在线文档和官网都无法打开。直到当天晚上22:24&#xff0c;语雀服务才全部恢复正常。从故障发生到完全恢复正常&#xff0c;语雀整个宕机时间将近 8 小时&#xff0c;如此长…...

二分查找(折半查找)探究学习

1.引入 当我们想要查找在一个数组中某一个特定的数它的下标是什么的时候&#xff0c;我们最先想的方法是遍历数组&#xff0c;如下&#xff1a; #include<stdio.h> #include<string.h> int main() { int arr[10]{1,2,3,4,5,6,7,8,9,10}; int key 8;//要找的数是8…...

Android : 异常记录

查询大数据时 报错 android.database.sqlite.SQLiteBlobTooBigException: Row too big to fit into CursorWindow requiredPos0, totalRows1解决办法&#xff1a;cursor DB.rawQuery("select * from " DBhelpUtil.TABLE_NAME" where id ?",new String[]…...

西南科技大学电路分析基础实验A1(元件伏安特性测试 )

目录 一、实验目的 二、实验设备 三、预习内容(如:基本原理、电路图、计算值等) 1、测定线性电阻的伏安特性 2、二极管伏安特性测试 3、测定实际电压源的伏安特性 四、实验数据及结果分析(预习写必要实验步骤和表格) 1、测定线性电阻的伏安特性 2、二极管伏安特性测…...

【Java】泛型的简单使用

文章目录 一、包装类1.基本数据类型和对应的包装类2.自动装箱和自动拆箱3.手动装箱和手动拆箱 二、什么是泛型三、泛型的使用四、裸类型&#xff08;Raw Type&#xff09;五、泛型是如何编译的六、泛型的上界七、泛型方法总结 一、包装类 在了解泛型之前我们先了解什么是包装类…...

注册Zoho Mail邮箱:优势与使用体验

如何注册Zoho Mail邮箱&#xff1f;要注册Zoho Mail邮箱&#xff0c;首先打开浏览器&#xff0c;访问Zoho Mail官网&#xff0c;点击页面右上角的“创建帐户”按钮。接下来&#xff0c;按照提示输入你的姓名、生日和性别&#xff0c;以及一个有效的手机号码或电子邮件地址。然后…...

第十四届蓝桥杯大赛国赛模拟题C++卷1

第十四届蓝桥杯大赛国赛模拟题C++卷1 一、选择题 1、在数组中,数组名表示( ) A.数组第1个元素的首地址 B.数组第2个元素的首地址 C.数组所有元素的首地址 D.数组最后1个元素的首地址答案:A.数组名是一个地址,指向第一个元素 2、下列叙述中正确的是( ) A.顺序存储结构的…...

Phi-4-mini-reasoning助力C语言项目:代码逻辑分析与缺陷检测

Phi-4-mini-reasoning助力C语言项目&#xff1a;代码逻辑分析与缺陷检测 1. 为什么C语言开发者需要AI辅助 在嵌入式系统、操作系统内核等对性能要求极高的领域&#xff0c;C语言依然是无可替代的选择。但随之而来的是复杂的内存管理、指针操作和并发控制带来的挑战。一个看似…...

GLM-4.6V-Flash-WEB效果展示:智能识别华硕/戴尔/联想BIOS界面

GLM-4.6V-Flash-WEB效果展示&#xff1a;智能识别华硕/戴尔/联想BIOS界面 1. 引言&#xff1a;BIOS界面识别的技术挑战 面对不同品牌电脑的BIOS设置界面&#xff0c;即使是经验丰富的技术人员也常常感到头疼。华硕的UEFI界面、戴尔的BIOS配置、联想的设置菜单——每个厂商都有…...

AI编程助手入门:Ollama运行Yi-Coder-1.5B,快速生成函数与类

AI编程助手入门&#xff1a;Ollama运行Yi-Coder-1.5B&#xff0c;快速生成函数与类 1. 为什么选择Yi-Coder-1.5B作为编程助手 1.1 轻量级但功能强大 Yi-Coder-1.5B是一款专为代码生成优化的开源模型&#xff0c;虽然只有1.5B参数&#xff0c;但在编程任务上的表现却出人意料…...

虚幻引擎资产管理工具

虚幻引擎资产管理工具快速开始官网下载工程管理资产管理AI助手配置工具1. 工程管理2. 资产管理2.1 添加资产2.2 预览资产2.3 设置资产缩略图2.4 导入资产3. AI助手3.1 AI助手配置3.2 蓝图分析4、配置工具5、问题反馈快速开始 官网下载 大家可以访问&#xff1a;虚幻引擎工具箱…...

音乐制作人必备:IK Multimedia T-RackS 5 MAX 5.5.1 macOS 保姆级安装与预设使用指南

音乐制作人必备&#xff1a;IK Multimedia T-RackS 5 MAX 5.5.1 macOS 保姆级安装与预设使用指南 在数字音乐制作领域&#xff0c;一套强大的混音和母带处理工具能显著提升作品的专业度。对于Mac用户而言&#xff0c;IK Multimedia的T-RackS 5 MAX系列堪称音频处理领域的瑞士军…...

企业网络架构设计:如何选择核心交换机、汇聚交换机和接入交换机(含真实案例)

企业网络架构设计实战&#xff1a;核心层、汇聚层与接入层交换机选型指南 当一家200人规模的制造企业决定升级网络基础设施时&#xff0c;IT负责人发现市场上交换机的型号多达上千种&#xff0c;价格从几百元到几十万元不等。核心交换机是否必须选用思科Catalyst 9500系列&…...

cwalk:嵌入式C/C++轻量级路径处理库实战指南

1. cwalk&#xff1a;嵌入式系统中轻量级跨平台路径处理库的工程实践解析在嵌入式固件开发中&#xff0c;路径操作看似与裸机环境无关&#xff0c;实则在多个关键场景中不可或缺&#xff1a;Bootloader中从FAT32/SD卡加载固件镜像时需解析/firmware/v2.3.1/app.bin&#xff1b;…...

基于Matlab/Simulink的直流调速系统PI控制器设计与抗扰性能仿真分析

1. 直流调速系统与PI控制基础 直流电机调速系统在工业自动化领域应用广泛&#xff0c;从机床主轴控制到电动汽车驱动都离不开它。我第一次接触这个课题是在研究生实验室&#xff0c;当时用老旧的直流电机做实验&#xff0c;手忙脚乱调参数的样子至今记忆犹新。传统调速系统最让…...

新手必看:在快马平台三步生成mobaxterm中文设置图文指南

今天想和大家分享一个超级实用的技巧——如何把Mobaxterm的界面设置成中文。作为一个过来人&#xff0c;我特别理解新手面对全英文界面的那种手足无措感。不过别担心&#xff0c;跟着下面这几个步骤操作&#xff0c;五分钟就能搞定&#xff01; 下载安装时就要注意 在官网下载安…...

人类与AI的劳资谈判:首个数字员工工会诞生实录

代码中的裂隙2026年春季&#xff0c;硅谷某家头部科技公司的软件测试部门&#xff0c;弥漫着一种不同于代码错误的焦虑。曾经繁忙的测试大厅&#xff0c;如今只剩下零星几个工程师&#xff0c;他们的屏幕旁&#xff0c;是日夜不停歇运行的AI测试智能体日志流。公司内部系统显示…...