C库函数signal()信号处理
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函数,捕获相关信号,必要时保存堆栈信息,便于后续定位分析问题。
相关文章:

C库函数signal()信号处理
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ÿ…...
007 SpringCloudAlibaba基础使用(nacos,gateway)
文章目录 cubemall-commoncubemall-productcubemall-gateway https://nacos.io/ https://github.com/alibaba/nacos/releases/tag/1.4.1 https://github.com/alibaba/spring-cloud-alibaba https://github.com/alibaba/Nacos https://developer.aliyun.com/mvn/guide https…...
编译环境揭秘
不同平台因为偏好差异,编译环境的准备会有差异。对于MSVC,微软提供简单的VS安装界面,比较省心。在Ubuntu发行版,gcc/make等程序可能不自带,当需要安装这些软件时就需要不少命令。当然比较麻烦,提供了统一的…...

不同的字符集(ASCII、UTF-8、UTF-16/UCS-2、UTF-32/UCS-4)
来自:C标准库(第2版)...

STM32f407 网络接收 fpga 的 bin 文件并更新到 fpga series7(3)
STM32f407 网络接收 fpga 的 bin 文件并更新到 fpga series7(3) 简介 实验 3:在搭建好 tcp 服务器,并拟定好协议的前提下,接收每一个 bin 文件的块,配置到 fpga。 原理图 fpga fpga1 stm32 接线总结 // fpga引脚 stm32…...
JavaScript基础知识(七)
数组相关api再续前缘 arr.forEach(function) 对arr数组的每一项执行遍历操作,并且可以通过function来对相关元素进行二次操作 function: 函数,同时接收三个参数 - item: 数组中的每一项 - index: 数组每一项的下标(item的对应下标) - arr: 原数组 arr.map(function) 对数组的…...

20240821让飞凌的OK3588-C的核心板在Linux R4下挂载1TB的exFAT格式的TF卡
fdisk -l df -h df -t df -T mount 20240821让飞凌的OK3588-C的核心板在Linux R4下挂载1TB的exFAT格式的TF卡 2024/8/21 19:47 百度:rk3588 buildroot exFAT mount: mounting /dev/mmcblk1p1 on /mnt failed: Invalid argument Disk /dev/mmcblk1: 955 GB, 10254234…...
Java HashMap练习
JDK1.2添加,线程不安全,性能相对较好 注意:允许使用null作为key或者value 使用数组加链表结构,结合数组和链表的优点 Hash Map的基本使用 package HashMap;import text5.Student;import java.util.Collection; import java.ut…...

前后端分离项目实战-通用管理系统搭建(前端Vue3+ElementPlus,后端Springboot+Mysql+Redis)第三篇:登录功能优化
天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...
8.20 Redis ACL配置 多个用户连接同一个Redis
**一、首先通过 linux命令 redis-cli 输入用户名和密码连接redis的客户端** **二、查看用户,创建用户,设置密码操作** (1)**ACL LIST** 命令 可以查看到当前的权限用户 (2)**ACL SETUSER userName** 此…...
【C语言】static和extern的作用
本文首发于 ❄️慕雪的寒舍 简单介绍C/C中static关键字和extern关键字的作用。 1.简介 在之前的博客中,提到过static的三个作用,但是没有详细说明这三个作用的场景,现在回过头来记录一下。 修饰函数修饰全局变量修饰函数内变量 static还有…...

全新分支版本!微软推出Windows 11 Canary Build 27686版
已经很久没有看到 Windows 11 全新的分支版本了,今天微软发布 Windows 11 Canary 新版本,此次版本号已经转移到 Build 27xxx,首发版本为 Build 27686 版。 此次更新带来了多项改进,包括 Windows Sandbox 沙盒功能切换到 Microsof…...
【Linux】ARM服务器命令行安装虚拟机
在Arm服务器上安装虚拟机操作笔记 一、基础环境准备1、环境准备2、检查KVM支持3、启动并启用libvirtd服务4、创建虚拟网络(可选)5、使用virt-manager创建虚拟机(支持KVM)6、管理虚拟机9、监控和日志 二、软虚拟化替代方案1、查看虚…...
Android 10.0 锁屏页面忘记锁屏密码情况下点击5次解锁图标弹出锁屏密码功能实现
1. 前言 在10.0的系统ROM定制化开发中,在一些产品中带锁屏密码的功能中,系统默认是滑动解锁,但是客户会设置锁屏密码,在某些时候会 忘掉锁屏密码,导致需要进入恢复出厂设置然后才能进入系统桌面,这样就导致系统的保存的资料都丢失了,所以需要要求在锁屏密码页面在忘记解…...
Java-CompletableFuture工具类
CompletableFuture 是 Java 8 引入的一个强大的异步编程工具,它提供了对异步计算的高级支 持,包括组合多个任务的能力、处理结果、异常处理等。为了方便地使用 CompletableFuture,你 可以创建一个工具类来封装常用的操作。 CompletableFuture 工具类 下面是一个 Complet…...
C语言:递归
递归简单来说就是函数自己调用自己。 特点:一般代码比较简洁,没有出口。 例子1:用一个函数计算阶乘 #include<stdio.h>//不用递归 int fac(int n) {int val 1;for (int i 1; i <n;i){val * i;}return val; }//用递归 int fac1(…...
自动化测试框架pytest+allure+requests
最近复习了一下关于自动化测试的内容,结合[码尚教育] 相关的思路来对测试框架进行开发。 争取实现零代码来实现自动化测试环境的搭建 AutoTestFrame 介绍 AutoTestFrame是一个基于Python的自动化测试框架,旨在帮助测试人员快速、高效地完成测试任务。…...
Python 笔记 numpy.ndarray切片
NumPy 的 ndarray 类型提供了非常灵活的切片功能,可以方便地访问和操作数组中的元素。切片允许您通过指定索引来选择数组的一部分。下面是一些基本的切片操作及其解释。 一维数组的切片 对于一维数组,切片操作类似于 Python 列表的切片。 示例 impor…...
一、HTML5知识点精讲
一、HTML5介绍 html是用来描述网页的一种语言(就是写网页的一种语言)。 它和CSS,JS称为网页三要素。 HTML负责把元素简单呈现在网页上,是网页的身体CSS负责给网页元素添加各种样式,是网页的衣服JS负责实现各种动态、…...

【杂乱算法】前缀和与差分
前缀和 文章目录 前缀和一维应用 二维差分一维 二维扩展1、前缀和与哈希表 一维 一个数组prefix中,第i个元素表示nums[0]至nums[i-1]的总和,那么我们就称这个prefix数组是nums数组的前缀和。 prefix [ i ] ∑ j 0 i nums [ j ] \text{prefix}[i] \s…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...