C库函数signal()信号处理

news2024/11/15 17:25:50

signal()是ANSI C信号处理函数,原型如下:

#include <signal.h>

typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);

signal()将信号signum的处置设置为handler,该handler为SIG_IGN(忽略), SIG_DFL(默认),或者是自定义函数的地址。

可以处理的一些信号:

信号名称    值    描述
SIGINT    	2  	Interrupt (ANSI)                	中断;e.g.终端键入DELETE或ctrl+c按键
SIGILL    	4  	Illegal instruction (ANSI)      	非法指令
SIGABRT   	6  	Abort (ANSI)                    	abort()异常终止
SIGBUS    	7  	BUS error (4.2 BSD)             	硬件故障
SIGFPE    	8  	Floating-point exception (ANSI) 	浮点异常
SIGSEGV   	11 	Segmentation violation (ANSI)   	段错误
SIGPIPE   	13 	Broken pipe (POSIX)             	管道破裂
SIGTERM   	15 	Termination (ANSI)              	尽可能终止
SIGSTKFLT 	16 	Stack fault                     	栈异常,默认终止进程
SIGCHLD   	17 	Child status has changed (POSIX)	子进程状态改变

注意:信号SIGKILL和SIGSTOP不能被捕获或忽略。

程序示例:

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

void signal_handler(int sig_no)
{
	printf("handling signal: %d\n", sig_no);
}

int main(int argc, char *argv[])
{
	signal(SIGINT   , signal_handler);
	signal(SIGILL   , signal_handler);
	signal(SIGABRT  , signal_handler);
	signal(SIGBUS   , signal_handler);
	signal(SIGFPE   , signal_handler);
	signal(SIGSEGV  , signal_handler);
	signal(SIGTERM  , signal_handler);
	signal(SIGSTKFLT, signal_handler);
	signal(SIGPIPE  , SIG_IGN);
	signal(SIGCHLD  , SIG_IGN);

	while(1)
	{
		sleep(1);
	}
	return 0;
}

编译运行程序,开启另一个终端,键入ps命令查看运行程序的PID,键入kill命令给该进程发送不同的信号,示例如下图:

从上面图片中可以看到,SIGSEGV和SIGILL信号被程序捕获然后输出打印信号值,SIGPIPE信号被程序忽略,SIGKILL信号不能被捕获,程序被无条件终止。都符合程序预期。

如果不希望程序遇到段错误等情况就被终止,可以自定义handler函数,捕获相关信号,必要时保存堆栈信息,便于后续定位分析问题。

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

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

相关文章

脊髓损伤治疗方法和需要那些营养

脊髓损伤作为一种严重的神经系统损伤&#xff0c;其治疗与康复一直是医学界关注的重点。在中医领域&#xff0c;针对脊髓损伤的治疗有着独特的理论和方法&#xff0c;旨在通过调节人体内部环境&#xff0c;促进受损神经的修复与再生。以下将从中医缓解方法与营养支持两个方面进…

Velero 快速上手:使用 Velero 实现 Kubernetes 集群备份与迁移

一、veloro 简介 Velero 是vmware开源的一个云原生的灾难恢复和迁移工具&#xff0c;它本身也是开源的,采用Go语言编写&#xff0c;可以安全的备份、恢复和迁移Kubernetes集群资源数据&#xff1b;Velero 是西班牙语意思是帆船&#xff0c;非常符合Kubernetes社区的命名风格&a…

【Python快速入门和实践017】Python常用脚本-根据文件后缀对其进行分类保存

一、功能介绍 这段代码的功能是将源文件夹中的文件按照它们的文件扩展名分类并移动到不同的子文件夹中。步骤如下&#xff1a; 定义函数&#xff1a;move_files_by_extension函数接收两个参数&#xff1a; source_folder&#xff1a;源文件夹路径。destination_folder&#xff…

LLM + GraphRAG技术,赋能教育培训行业数字化创新

随着人工智能大模型时代的到来&#xff0c;LLM大语言模型、RAG增强检索、Graph知识图谱、Prompt提示词工程等技术的发展日新月异&#xff0c;也让各行各业更加期待技术带来的产业变革。 比如&#xff0c;教育培训行业&#xff0c;教师数量相对有限、学生个体差异较大&#xff…

数据结构第一天

数据结构基础知识 1.1 什么是数据结构 数据结构就是数据的逻辑结构以及存储操作 (类似数据的运算) 数据结构就教会你一件事&#xff1a;如何更有效的存储数据 1.2 数据 数据&#xff1a;不再是单纯的数字&#xff0c;而是类似于集合的概念。 数据元素&#xff1a;是数据的基本单…

怎样卸载python

python卸载干净的具体操作步骤如下&#xff1a; 1、首先打开电脑左下角开始菜单&#xff0c;点击“运行”选项&#xff0c;输入“cmd”。 2、输入“python --version”&#xff0c;得到一个程序的版本&#xff0c;按回车键。 3、点击下图程序。 4、然后在该页面中点击“uninst…

【投融界-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

8 自动类型转换、强制类型转换、整数数据溢出与模运算、浮点数精度丢失、类型转换值截断

目录 1 自动类型转换&#xff08;隐式转换&#xff09; 1.1 运算过程中的自动类型转换 1.1.1 转换规则 1.1.2 转换方向 1.1.3 案例演示 1.2 赋值时的自动类型转换 1.2.1 案例演示 2 强制类型转换&#xff08;显式转换&#xff09; 2.1 介绍 2.2 转换格式 2.3 转换规…

案例分享—国外毛玻璃效果UI设计案例

毛玻璃效果通过模糊和半透明特性&#xff0c;显著增强了UI界面的层次感和深度&#xff0c;使得元素之间界限清晰&#xff0c;同时赋予界面一种现代、高级的质感&#xff0c;提升了整体视觉吸引力。 该效果不仅美观&#xff0c;还通过柔和的色彩和光照效果营造出清新、轻松的氛围…

回归分析系列1-多元线性回归

03 多元线性回归 3.1 简介 多元线性回归是简单线性回归的扩展&#xff0c;允许我们同时研究多个自变量对因变量的影响。多元回归模型可以表示为&#xff1a; 其中&#xff0c;x1,x2,…,xp是 p 个自变量&#xff0c;β0 是截距&#xff0c;β1,β2,…,βp是对应的回归系数&…

【STM32项目】在FreeRtos背景下的实战项目的实现过程(一)

个人主页~ 这篇文章是我亲身经历的&#xff0c;在做完一个项目之后总结的经验&#xff0c;虽然我没有将整个项目给放出来&#xff0c;因为这项目确实也是花了米让导师指导的&#xff0c;但是这个过程对于STM32的实战项目开发都是非常好用的&#xff0c;可以说按照这个过程&…

Layout 布局组件快速搭建

文章目录 设置主题样式变量封装公共布局组件封装 Logo 组件封装 Menu 菜单组件封装 Breadcrumb 面包屑组件封装 TabBar 标签栏组件封装 Main 内容区组件封装 Footer 底部组件封装 Theme 主题组件 经典布局水平布局响应式布局搭建 Layout 布局组件添加 Layout 路由配置启动项目 …

关于Idea中的debug模式只能执行一次的问题

希望文章能给到你启发和灵感&#xff5e; 如果觉得文章对你有帮助的话&#xff0c;点赞 关注 收藏 支持一下博主吧&#xff5e; 阅读指南 开篇说明一、基础环境说明1.1 硬件环境1.2 软件环境 二、为什么debug模式只有生效一次三、补充说明其他调试功能四、最后 开篇说明 记录一…

设计模式学习优质网站分享:refactoring.guru

地址 英文版地址&#xff1a;https://refactoring.guru/design-patterns 中文版地址&#xff1a;https://refactoringguru.cn/design-patterns 介绍 这个网站是专门学习 设计模式 和 软件重构 的网站 整体来说并不花哨&#xff0c;但我觉得他最大的优点就是&#xff1a; 概…

PyTorch 基础学习(2)- 张量 Tensors

PyTorch张量简介 张量是数学和计算机科学中的一个基本概念&#xff0c;用于表示多维数据&#xff0c;是AI世界中一切事物的表示和抽象。可以将张量视为一个扩展了标量、向量和矩阵的通用数据结构。以下是对张量的详细解释&#xff1a; 张量的定义 标量&#xff08;0阶张量&am…

Assembly(七)实验环境搭建

本篇文章将讲解在win11环境下的王爽老师的汇编语言的环境搭建 首先凑齐这些文件: 随后安装好Dosbox,去官网下载就好 打开箭头所指文件 找到文件最后部分 [autoexec] # Lines in this section will be run at startup. # You can put your MOUNT lines here. MOUNT C D:\Debug …

快速搭建Vue_cli以及ElementUI简单项目学生管理系统雏形

为了帮助大家快速搭建Vue_cli脚手架还有ElementUI的简单项目,今天我给大家提供方法. 因为这个搭建这个项目步骤繁多,容易忘记,所以给大家提供这个资料希望可以帮助到你们. 废话不多说开始搭建项目: 搭建Vue_cli项目 首先点开HBuilder左上角的文件点击新建,点击项目,选择vue项…

2024年人工智能固态硬盘采购容量预计超过45 EB

根据TrendForce发布的最新市场报告&#xff0c;人工智能&#xff08;AI&#xff09;服务器客户在过去两个季度显著增加了对企业级固态硬盘&#xff08;SSD&#xff09;的订单。为了满足AI应用中不断增长的SSD需求&#xff0c;上游供应商正在加速工艺升级&#xff0c;并计划在20…

智慧交通物联网应用,5G路由器赋能高速道路监控数据传输

高速道路为了保障交通的高速、安全运行&#xff0c;沿线部署了控制设施、监视设施、情报设施、传输设施、显示设施及控制中心等。在传统的高速管理中&#xff0c;这些设施的传输设施多采用光纤线缆进行数据传输&#xff0c;但高速道路覆盖范围广、距离远&#xff0c;布线与施工…

韩顺平 集合

集合 一、体系结构图二、Collection2.1 Collection 接口和常用方法2.2 集合遍历2.2.1 迭代器2.2.2 增强for循环 三、List接口及其常用方法3.1 三种遍历方式3.2 ArrayList3.3 LinkedList 四 MAP4.1 hashmap 一、体系结构图 集合主要是两组 单列和双列集合 Collection接口有两个重…