Linux——31个普通信号

每种信号的含义

在Linux操作系统中,信号是一种进程间通信的方式,用于通知进程发生了某种事件。Linux中的普通信号(standard signals)有31个,每个信号都有特定的用途。以下是这31个普通信号的列表及其描述:

  1. SIGHUP (1): 挂起信号,通常在终端断开或关闭时发送给控制进程。
  2. SIGINT (2): 中断信号,通常由用户按下Ctrl+C键发送。
  3. SIGQUIT (3): 退出信号,通常由用户按下Ctrl+\键发送并生成核心转储。
  4. SIGILL (4): 非法指令,程序执行了非法或未定义的机器语言指令。
  5. SIGTRAP (5): 跟踪/断点陷阱,用于调试。
  6. SIGABRT (6): 异常终止,由abort()函数调用发送。
  7. SIGBUS (7): 总线错误,内存访问对齐错误。
  8. SIGFPE (8): 浮点异常,如除零或溢出。
  9. SIGKILL (9): 强制终止信号,不能被捕获或忽略,立即终止进程。
  10. SIGUSR1 (10): 用户定义信号1,应用程序可以自定义使用。
  11. SIGSEGV (11): 段错误,非法内存访问。
  12. SIGUSR2 (12): 用户定义信号2,应用程序可以自定义使用。
  13. SIGPIPE (13): 管道破裂,写入一个没有读取端的管道。
  14. SIGALRM (14): 闹钟信号,由alarm()函数设置的定时器到期时发送。
  15. SIGTERM (15): 终止信号,程序可以捕获该信号并执行清理操作。
  16. SIGSTKFLT (16): 协处理器堆栈错误(较少使用)。
  17. SIGCHLD (17): 子进程状态改变,当子进程终止或停止时发送给父进程。
  18. SIGCONT (18): 继续执行,如果进程已停止则恢复其执行。
  19. SIGSTOP (19): 停止执行,不能被捕获或忽略。
  20. SIGTSTP (20): 终端停止信号,通常由用户按下Ctrl+Z键发送。
  21. SIGTTIN (21): 后台进程尝试从终端读取时发送。
  22. SIGTTOU (22): 后台进程尝试向终端写入时发送。
  23. SIGURG (23): 紧急条件,套接字上有紧急数据可读。
  24. SIGXCPU (24): CPU时间限制超时。
  25. SIGXFSZ (25): 文件大小限制超时。
  26. SIGVTALRM (26): 虚拟定时器到期。
  27. SIGPROF (27): 统计定时器到期。
  28. SIGWINCH (28): 终端窗口大小改变。
  29. SIGPOLL (29): I/O操作事件(SysV定义)。
  30. SIGPWR (30): 电源故障。
  31. SIGSYS (31): 非法系统调用。

这些信号在编程和系统管理中有着重要的应用。通过使用信号,进程可以处理各种异常和特殊情况,实现更健壮和灵活的程序设计。

捕获SIGINT信号

SIGINT信号通常由用户按下Ctrl+C键发送。以下代码展示了如何捕获和处理SIGINT信号:

#include <stdio.h>
#include <signal.h>
#include <unistd.h>// 信号处理函数
void handle_sigint(int sig) {printf("Caught signal %d (SIGINT)\n", sig);
}int main() {// 注册信号处理函数signal(SIGINT, handle_sigint);// 无限循环,等待信号while (1) {printf("Running...\n");sleep(1);}return 0;
}

编译并运行该程序后,当你按下Ctrl+C时,它将捕获SIGINT信号并调用handle_sigint函数。

捕获SIGTERM信号

SIGTERM信号通常用于请求进程终止。以下代码展示了如何捕获和处理SIGTERM信号:

 

#include <stdio.h>
#include <signal.h>
#include <unistd.h>// 信号处理函数
void handle_sigterm(int sig) {printf("Caught signal %d (SIGTERM)\n", sig);// 进行清理工作printf("Cleaning up...\n");// 终止程序_exit(0);
}int main() {// 注册信号处理函数signal(SIGTERM, handle_sigterm);// 无限循环,等待信号while (1) {printf("Running...\n");sleep(1);}return 0;
}

编译并运行该程序后,可以通过以下命令发送SIGTERM信号:

kill -SIGTERM <pid>

其中,<pid>是程序的进程ID。

捕获SIGCHLD信号

SIGCHLD信号在子进程终止或停止时发送给父进程。以下代码展示了如何捕获和处理SIGCHLD信号:

#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <sys/wait.h>// 信号处理函数
void handle_sigchld(int sig) {// 等待子进程终止wait(NULL);printf("Caught signal %d (SIGCHLD). Child process terminated.\n", sig);
}int main() {// 注册信号处理函数signal(SIGCHLD, handle_sigchld);// 创建子进程pid_t pid = fork();if (pid == 0) {// 子进程代码printf("Child process running...\n");sleep(2);printf("Child process exiting...\n");_exit(0);} else {// 父进程代码printf("Parent process waiting for child to terminate...\n");// 无限循环,等待信号while (1) {sleep(1);}}return 0;
}

编译并运行该程序后,子进程将在2秒后终止,父进程将捕获SIGCHLD信号并调用handle_sigchld函数。

两种不能被忽略的信号 

SIGKILL和SIGSTOP

两种不能被捕捉的信号

SIGKILL和SIGSTOP

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

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

相关文章

为什么序列化???

跨进程调用&#xff0c;进行数据传输时&#xff0c;无法直接传递对象&#xff0c;需要将对象通过序列化的方式转为字节流或字符流&#xff08;json&#xff09;&#xff0c;所以需要进行序列化。 需要共享数据时&#xff0c;直接传递对象通常是不可行的&#xff0c;因为对象的…

C# UDP网络通信

TCP和UDP基本概念 TCP:(Transmission Control Protocol)是一种面向连接、可靠的、基于字节流的传输层通信协议。并且提供了全双工通信&#xff0c;允许俩个应用直接建立一个可靠的连接 以进行数据交换 /UDP:(User Datagram Protocol):是一种无连接、不可靠、基于数据报文传输层…

每日复盘-20240625

今日关注: 20240625 六日涨幅最大: ------1--------300930--------- 屹通新材 五日涨幅最大: ------1--------300930--------- 屹通新材 四日涨幅最大: ------1--------300386--------- 飞天诚信 三日涨幅最大: ------1--------300386--------- 飞天诚信 二日涨幅最大: ------…

JVM专题十:JVM中的垃圾回收机制

在JVM专题九&#xff1a;JVM分代知识点梳理中&#xff0c;我们主要介绍了JVM为什么采用分代算法&#xff0c;以及相关的概念&#xff0c;本篇我们将详细拆分各个算法。 垃圾回收的概念 垃圾回收&#xff08;Garbage Collection&#xff0c;GC&#xff09;确实是计算机编程中的…

【Android面试八股文】你能说一说RecycleView与ListView的对比吗?着重说一下缓存策略,优缺点。

文章目录 一、考察的知识点二、RecycleView与ListView的对比2.1 布局效果2.2 Item点击事件2.3 空数据处理2.4 头尾布局2.5 局部刷新2.6 动画效果2.7 缓存机制2.7.1 层级不同2.7.2 缓存内容不同2.7.3 缓存机制2.7.4 ListView与RecyclerView缓存级别的对比2.7.4.1 ListView(两级缓…

【自然语言处理系列】探索NLP:使用Spacy进行分词、分句、词性标注和命名实体识别,并以《傲慢与偏见》与全球恐怖活动两个实例文本进行分析

本文深入探讨了scaPy库在文本分析和数据可视化方面的应用。首先&#xff0c;我们通过简单的文本处理任务&#xff0c;如分词和分句&#xff0c;来展示scaPy的基本功能。接着&#xff0c;我们利用scaPy的命名实体识别和词性标注功能&#xff0c;分析了Jane Austen的经典小说《傲…

discuz插件之优雅草超级列表互动增强v1.2版本更新

https://doc.youyacao.com/9/2142 v1.2更新 discuz插件之优雅草超级列表互动增强v1.2版本更新 [title]20220617 v1.2发布[/title] 增加了对php8的支持 增加了 对discuz3.5的支持

RocketMQ源码学习笔记:Broker启动流程

这是本人学习的总结&#xff0c;主要学习资料如下 马士兵教育rocketMq官方文档 目录 1、Broker启动流程2、一些重要的类2.1、MappedFile2.2、MessgeStore2.3、MessageStore的加载启动流程 3、技术亮点3.1、 内存映射3.1.1、简介3.1.2、源码 1、Broker启动流程 Broker启动流程…

RabbitMQ中lazyqueue队列

lazyqueue队列非常强悍 springboot注解方式开启 // 使用注解的方式lazy.queue队列模式 非常GoodRabbitListener(queuesToDeclare Queue(name "lazy.queue",durable "true",arguments Argument(name "x-queue-mode",value "lazy&…

3.蓝牙模块HC-08

目录 一.简介​编辑 二.主要参数 三.模块引脚说明 四、LED指示灯状态 五.AT指令 5.1AT指令重点 5.2 AT指令注意点 5.3 AT指令集 六.AT常用指令 6.1 测试指令 AT 6.2 查询当前参数ATRX 6.3设置主从模式 ATROLE 6.4设置蓝牙模式 ATNAME 6.5 设置波特率 …

【FFmpeg】AVFormatContext结构体

【FFmpeg】AVFormatContext结构体 1.AVFormatContext结构体1.2 const struct AVInputFormat *iformat1.3 const struct AVOutputFormat *oformat 参考&#xff1a; FFMPEG结构体分析&#xff1a;AVFormatContext 示例工程&#xff1a; 【FFmpeg】调用ffmpeg库实现264软编 【FF…

YOLOv5改进(八)--引入Soft-NMS非极大值抑制

文章目录 1、前言2、各类NMS代码实现2.1、general.py 3、各类NMS实现3.1、Soft-NMS3.2、GIoU-NMS3.3、DIoU-NMS3.4、CIoU-NMS3.5、EIoU-NMS 4、目标检测系列文章 1、前言 目前yolov5使用的是NMS进行极大值抑制&#xff0c;本篇文章是要将各类NMS添加到yolov5中&#xff0c;同时…

6.25作业

1.整理思维导图 2.终端输入两个数&#xff0c;判断两数是否相等&#xff0c;如果不相等&#xff0c;判断大小关系 #!/bin/bash read num1 read num2 if [ $num1 -eq $num2 ] then echo num1num2 elif [ $num1 -gt $num2 ] then echo "num1>num2" else echo &quo…

【基于构件的软件工程开发模型】

文章目录 前言一、基本概念二、优点1. 可重用性2. 易于维护3. 并行开发4. 灵活性 三、缺点1. 构件选择2. 接口管理3. 效率问题 前言 基于构件的开发模型是一种常见的方法之一&#xff0c;它将软件系统划分为独立的构件&#xff0c;并通过组装这些构件来构建整个系统。 一、基本…

200.回溯算法:子集||(力扣)

class Solution { public:vector<int> res; // 当前子集vector<vector<int>> result; // 存储所有子集void backtracing(vector<int>& nums, int index, vector<bool>& used) {result.push_back(res); // 将当前…

Unity 公用函数整理【二】

1、在规定时间时间内将一个值变化到另一个值&#xff0c;使用Mathf.Lerp实现 private float timer;[Tooltip("当前温度")]private float curTemp;[Tooltip("开始温度")]private float startTemp 20;private float maxTemp 100;/// <summary>/// 升…

【嵌入式Linux】<总览> 进程间通信(更新中)

文章目录 前言 一、管道 1. 概念 2. 匿名管道 3. 有名管道 二、内存映射区 1. 概念 2. mmap函数 3. 进程间通信&#xff08;有血缘关系&#xff09; 4. 进程间通信&#xff08;没有血缘关系&#xff09; 5. 拷贝文件 前言 在文章【嵌入式Linux】&#xff1c;总览&a…

ArkTS开发系列之事件(2.8.2手势事件)

上篇回顾&#xff1a;ArkTS开发系列之事件&#xff08;2.8.1触屏、键鼠、焦点事件&#xff09; 本篇内容&#xff1a;ArkTS开发系列之事件&#xff08;2.8.2手势事件&#xff09; 一、绑定手势方法 1. 常规手势绑定方法 Text(手势).fontSize(44).gesture(TapGesture().onAct…

Latex学习之fontspect宏包

Latex学习之fontspect宏包 一、简介 fontspec 宏包是 XeLaTeX 和 LuaLaTeX 编译器的字体配置工具。它允许用户直接使用操作系统中安装的任何 OpenType 或 TrueType 字体&#xff0c;使用 fontspec 宏包&#xff0c;你可以轻松地设置文档的主字体、 sans-serif 字体、 monospac…

浏览器断点调试(用图说话)

浏览器断点调试&#xff08;用图说话&#xff09; 1、开发者工具2、添加断点3、查看变量值 浏览器断点调试 有时候我们需要在浏览器中查看 html页面的js中的变量值。1、开发者工具 打开浏览器的开发者工具 按F12 &#xff0c;没反应的话按FnF12 2、添加断点 3、查看变量值