linux系统信号简介

news2024/12/26 21:02:53

原文地址:linux系统信号简介 – 无敌牛

欢迎参观我的个人博客:无敌牛 – 技术/著作/典籍/分享等

介绍

信号是一种重要的进程间通讯方式,这些信号有的有特定的用法,有的可作为扩展和自定义使用。并且大多数信号是可以被重新定义处理函数的。只有两个信号 SIGKILL 和 SIGSTOP 是不可以被捕捉、忽略和阻塞的,这是为了操作系统更好的控制进程和系统资源,防止滥用信号,确保系统的稳定性。此篇文章逐一解释一下每一个信号的作用。

可以用系统指令:kill -l 查看系统支持的信号,输出内容如下:

可以看出,linux 系统一般支持 1-31、34-64 共62个信号。其中:

1-31 是传统信号,这些信号在Unix和类Unix操作系统中是标准化的,每个信号都有其特定的用途和行为。

34-64 是实时信号,用于应用程序之间自定义的进程间通信。实时信号的主要特点是它们支持排队,这意味着如果多个相同类型的实时信号被发送给同一个接收者,接收者会按顺序接收到每一个信号,而不会丢失任何信号。相比之下,传统信号如果多次发送,则可能只会接收到一次。另外它们比传统信号具有更高的优先级

信号解释

写了一小段代码,来逐一测试进程接收到信号后,默认的处理方式。测试不同的信号,把下边的代码中 SIGHUP 替换掉就可以了。可通过指令:gcc -o e_tsig1 tsig1.c 编译代码。操作系统发行版不一样,默认处理方式可能会不一样,但是不会相差太多。代码如下:

// gcc -o e_tsig1 tsig1.c

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

int main() {
    unsigned int mypid = 0 ;
    printf("my pid is :%u\n", (mypid = getpid()) ) ;
    kill(mypid, SIGHUP) ;
    while(1) {
        printf("still running %u\n", mypid) ;
        sleep(1) ;
    }
}

SIGHUP 1 :Hangup 终端挂断信号,通常在终端连接中断、用户从系统注销、网络连接断开时产生。

系统默认处理方式:终止进程。默认处理程序测试:

通常情况下,捕捉此信号,重新处理函数,用来重新加载程序配置使用。systemctl reload xxxx.service 默认就是发送的此信号,这就需要接收信号的进程响应此信号,重写信号处理函数。


SIGINT 2 :Interrupt 中断信号,用户输入 Ctrl + C 就是发送的此信号,通常用于快速终止进程。

系统默认处理方式:进程快速被终止进程。默认处理程序测试:


SIGQUIT 3 :Quit 退出信号,并生成核心转储文件(coredump文件),可由用户输入 Ctrl + \ 发送此信号。

系统默认处理方式:进程退出,生成 coredump 文件。默认处理程序测试:


SIGILL 4 :Illegal Instruction 非法指令信号。这里的指令指的是CPU指令,操作系统内核在检测到进程尝试执行非法指令时自动发起。

系统默认处理方式:终止进程并生成核心转储文件。默认处理程序测试:

通常在编译、运行二进制或者硬件故障的情况下会发生。在调试代码的时候,内存溢出的情况下经常会出现此信号,数据被覆盖,尤其是代码段被覆盖,导致指令错乱。


SIGTRAP 5 :Trace/Breakpoint Trap 断点信号。通常用于调试。

系统默认处理方式:终止进程并生成核心转储文件。默认处理程序测试:


SIGABRT 6 :Abort 进程异常终止信号,由abort(3)函数调用触发。

系统默认处理方式:终止进程并生成核心转储文件。默认处理程序测试:


SIGBUS 7 :Bus 总线错误,通常指非法内存地址访问。

系统默认处理方式:终止进程并生成核心转储文件。默认处理程序测试:


SIGFPE 8 :Floating Point Exception 浮点运算错误,通常指除以0错误。

系统默认处理方式:终止进程并生成核心转储文件。默认处理程序测试:


SIGKILL 9 :Kill 强制终止进程。

系统默认处理方式:终止进程。默认处理程序测试:

这个信号不能被捕获、阻塞或忽略,用于立即结束进程。它是当其他信号无法使进程退出时的最后手段。


SIGUSR1 10 :User Defined Signal 1 用户自定义信号1。

系统默认处理方式:终止进程。默认处理程序测试:

一般用来被重写信号处理函数。


SIGSEGV 11 :Segmentation Violation 断错误信号。发生了非法内存地址访问时,会收到此信号。

系统默认处理方式:终止进程并创建核心转储文件。默认处理程序测试:

内存溢出、double free、访问地址越界等都会报此错误。


SIGUSR2 12 :User Defined Signal 2 用户自定义信号2。

系统默认处理方式:终止进程。默认处理程序测试:

一般用来被重写信号处理函数。


SIGPIPE 13 :Broken Pipe 管道写入错误信号。通常表示向已关闭的管道写入数据。

系统默认处理方式:终止进程。默认处理程序测试:


SIGALRM 14 :Alarm Clock 定时器到期信号,通常由 alarm 函数设置。

系统默认处理方式:终止进程。默认处理程序测试:


SIGTERM 15 :Terminate 请求终止进程信号,通常用于优雅地关闭进程。

系统默认处理方式:终止进程。默认处理程序测试:

一般会重写此信号的处理函数,做一些必要的资源回收和关闭。systemctl stop xxxx.service 默认就是发送的 SIGTERM 信号。此信号 和 SIGINT 几乎一样的功能。


SIGSTKFLT 16 :Stack Fault 栈故障信号。它主要用于旧的 SPARC 架构上的浮点栈溢出。

系统默认处理方式:终止进程。默认处理程序测试:


SIGCHLD 17 :Child Process Stopped or Terminated 子进程状态改变信号。当子进程停止或终止时发送给父进程

系统默认处理方式:忽略。默认处理程序测试:

如果需要处理子进程的返回信息,需要对此信号添加信号处理函数。


SIGCONT 18 :Continue 恢复进程信号。当进程被暂停的时候,通过此信号继续让进程执行。

系统默认处理方式:继续执行进程。默认处理程序测试:

单独触发此信号是没有意义的,当进程被 SIGSTOP 、SIGTSTP 、SIGTTIN 、SIGTTOU 暂停或者由于其他原因暂停的时候,收到此信号,就会继续执行。


SIGSTOP 19 :Stop 暂停进程信号。暂停进程,不能被阻塞、捕获或忽略。进程可以被 SIGCONT 再次启动。

系统默认处理方式:暂停进程。默认处理程序测试:


SIGTSTP 20 :Terminal Stop 暂停进程信号。暂停进程,可以被捕获或忽略。进程可以被 SIGCONT 再次启动。

系统默认处理方式:暂停进程。默认处理程序测试:


SIGTTIN 21 :Background Read from TTY 终端输入信号。暂停进程,收到此信号代表后台试图读取控制终端提供的数据。进程可以被 SIGCONT 再次启动。

系统默认处理方式:暂停进程。默认处理程序测试:


SIGTTOU 22 :Background Write from TTY 终端输出信号。暂停进程,收到此信号代表后台试图把数据写入控制终端。进程可以被 SIGCONT 再次启动。

系统默认处理方式:暂停进程。默认处理程序测试:


SIGURG 23 :Urgent Condition on Socket 紧急数据可用信号。接收到此信号说明套接字上有紧急条件需要处理。

系统默认处理方式:忽略。默认处理程序测试:

信号用于通知进程其套接字上有紧急数据到达。默认情况下,进程会忽略这个信号,但可以通过安装信号处理函数来捕获并处理紧急数据。这对于需要实时响应的通信场景非常有用。通过管理 SIGURG 信号,可以提高应用程序的实时性和响应能力。


SIGXCPU 24 :Exceeded CPU Time Limit CPU使用超时信号。在进程超过为其分配的CPU时间限制时会接收到来自系统的发送的这个信号。

系统默认处理方式:终止进程并创建核心转储。默认处理程序测试:

在执行 ulimit -t 可以查看系统设置的CPU限制,一般默认都是不限制的。或者通过 struct rlimit 设置进程占用CPU时间,一旦超过 CPU 时间限制,就会触发此信号。


SIGXFSZ 25 :Exceeded File Size Limit 超过文件大小限制信号。在进程超过文件大小限制时会接收到来自系统的发送的这个信号。

系统默认处理方式:终止进程并创建核心转储。默认处理程序测试:

在执行 ulimit -f 可以查看系统设置的文件大小限制,一般默认都是不限制的。或者通过 struct rlimit 设置进程打开文件限制,一旦超过限制,就会触发此信号。


SIGVTALRM 26 :Virtual Timer Expired 虚拟定时器到期信号。

系统默认处理方式:终止进程。默认处理程序测试:

虚拟定时器是一种基于进程的用户态时间的定时器,与实际的系统时间无关,只计算进程在用户态下实际运行的时间。


SIGPROF 27 :Profiling Timer Expired 性能分析定时器到期。

系统默认处理方式:终止进程。默认处理程序测试:

记录程序在不同部分的执行时间,帮助识别瓶颈和优化代码。可以通过 setitimer 系统调用来设置性能分析定时器。setitimer 可以设置三种类型的定时器,其中包括性能分析定时器(ITIMER_PROF)。


SIGWINCH 28 :Window Change 窗口大小改变信号。在终端窗口大小发生变化时发送给进程。

系统默认处理方式:忽略。默认处理程序测试:

通过理解和管理 SIGWINCH 信号,可以提高应用程序的用户体验和适应性。


SIGIO 29 :Input/Output Possible I/O可操作信号。通知进程某个文件描述符已经准备好进行 I/O 操作,通常用于异步 I/O 操作。

系统默认处理方式:终止进程。默认处理程序测试:


SIGPWR 30 :Power Failure 电源故障或即将关机信号。通知进程电源即将断开,通常是由于系统检测到电源故障或即将关机而发送的。

系统默认处理方式:终止进程。默认处理程序测试:

通过设置此信号的处理函数,可以在一定程度上防止突然断电带来的系统损坏。


SIGSYS 31 :Bad System Call 无效系统调用信号。

系统默认处理方式:终止进程并生成核心转储文件。默认处理程序测试:


SIGRTMIN — SIGRTMAX >=34 & <=64:Real Time min — max 实时信号。

系统默认处理方式:终止进程。默认处理程序测试,以 SIGRTMIN 为例:

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

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

相关文章

Linux 各个目录作用

刚毕业的时候学习Linux基础知识&#xff0c;发现了一份特别好的文档快乐的 Linux 命令行&#xff0c;翻译者是happypeter&#xff0c;作者当年也在慕课录制了react等前端相关的视频&#xff0c;通俗易懂&#xff0c;十分推荐 关于Linux的目录&#xff0c;多数博客已有详细介绍…

JavaScript对象笔记

JavaScript对象笔记 什么是JavaScript对象 JavaScript对象是一组键值对的集合&#xff0c;其中键是字符串&#xff08;通常是字符串&#xff0c;但也可以是符号&#xff09;&#xff0c;值可以是任何数据类型。 特点 动态性&#xff1a;可以在运行时添加、删除或更改属性。灵…

如何快速使用Unity 的UPR---1资源检测保姆级

关于我们的性能检测工具已经有很多了&#xff0c;比如UWA的或者是我们的Unity 的UPR 都是很好的&#xff0c;今天说一下UPR吧 官方网址 &#xff1a;UPR - Unity专业性能优化工具 这个是官方给的Demo 选择你的平台就可以 这个可以作为一个参考但是不是很建议用官方的因为我们…

Qt桌面应用开发 第九天(综合项目一 飞翔的鸟)

目录 1.鸟类创建 2.鸟动画实现 3.鼠标拖拽 4.自动移动 5.右键菜单 6.窗口透明化 项目需求&#xff1a; 实现思路&#xff1a; 创建项目导入资源鸟类创建鸟动画实现鼠标拖拽实现自动移动右键菜单窗口透明化 1.鸟类创建 ①鸟类中包含鸟图片、鸟图片的最小值下标和最大值…

【实体配置】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…

Pytorch-GPU版本离线安装

最近在复现一项深度学习的工作&#xff0c;发现自己的pytorch是装的cpu版的(好像当时是直接加清华源&#xff0c;默认是cpu版本&#xff09;。从官网在线下载速度太慢&#xff0c;还时不时断开连接&#xff0c;我们可以配置conda的清华源去这个问题&#xff0c;但是考虑到是在用…

聊聊Flink:这次把Flink的触发器(Trigger)、移除器(Evictor)讲透

一、触发器(Trigger) Trigger 决定了一个窗口&#xff08;由 window assigner 定义&#xff09;何时可以被 window function 处理。 每个 WindowAssigner 都有一个默认的 Trigger。 如果默认 trigger 无法满足你的需要&#xff0c;你可以在 trigger(…) 调用中指定自定义的 tr…

[Redis#12] 常用类型接口学习 | string | list

目录 0.准备 1.string get | set set_with_timeout_test.cpp set_nx_xx_test.cpp mset_test.cpp mget_test.cpp getrange_setrange_test.cpp incr_decr_test.cpp 2.list lpush_lrange_test.cpp rpush_test.cpp lpop_rpop_test.cpp blpop_test.cpp llen_test.cpp…

网络安全之IP伪造

眼下非常多站点的涉及存在一些安全漏洞&#xff0c;黑客easy使用ip伪造、session劫持、xss攻击、session注入等手段危害站点安全。在纪录片《互联网之子》&#xff08;建议搞IT的都要看下&#xff09;中。亚伦斯沃茨&#xff08;真实人物&#xff0c;神一般的存在&#xff09;涉…

Spring Web开发(请求)获取JOSN对象| 获取数据(Header)

大家好&#xff0c;我叫小帅今天我们来继续Spring Boot的内容。 文章目录 1. 获取JSON对象2. 获取URL中参数PathVariable3.上传⽂件RequestPart3. 获取Cookie/Session3.1 获取和设置Cookie3.1.1传统获取Cookie3.1.2简洁获取Cookie 3. 2 获取和存储Session3.2.1获取Session&…

(SAST检测规则-1)Android - 权限管理漏洞

所属分类&#xff1a;Android - 权限管理漏洞缺陷详解&#xff1a;应用未正确实施最小权限原则或滥用已声明的权限可能导致敏感信息泄露。例如&#xff0c;恶意代码利用已授予的权限绕过用户授权&#xff0c;访问通讯录、位置、短信等敏感资源。部分开发者还可能滥用权限以执行…

EC2还原快照

EC2还原快照 AWS EC2 磁盘快照 是您 Amazon Elastic Block Store (EBS) 卷在特定时间点的增量备份。您可以使用快照创建 EBS 卷的副本&#xff0c;以便在出现故障时恢复数据或将数据迁移到其他区域。 创建磁盘快照 找到ec2实例挂载的磁盘&#xff0c;直接选择创建快照 等待创建…

oracle RAC各版本集群总结和常用命令汇总

oracle RAC学习 RAC介绍 RAC&#xff1a;高可用集群&#xff0c;负载均衡集群&#xff0c;高性能计算集群 RAC是⼀种⾼可⽤&#xff0c;⾼性能&#xff0c;负载均衡的share-everything的集群 8i:内存融合雏形 内存融合雏形&#xff08;Oracle Parallel Server&#xff09;…

【聚类】K-Means 聚类(无监督)及K-Means ++

1. 原理 2. 算法步骤 3. 目标函数 4. 优缺点 import torch import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn.decomposition import PCA import torch.nn as nn# 数据准备 # 生成数据&#xff1a;100 个张量&#xff0c…

智慧银行反欺诈大数据管控平台方案(一)

智慧银行反欺诈大数据管控平台建设方案的核心在于通过整合先进的大数据技术和深度学习算法&#xff0c;打造一个全面、智能且实时的反欺诈系统&#xff0c;以有效识别、预防和应对各类金融欺诈行为。该方案涵盖数据采集、存储、处理和分析的全流程&#xff0c;利用多元化的数据…

搭建业务的性能优化指南

这是一篇搭建业务优化的心路历程&#xff0c;也是写给搭建业务的性能优化指南。 前言 直到今天&#xff0c;淘内的页面大多都迁移到了 SSR&#xff0c;从我们终端平台 - 搭建研发团队的视角看&#xff0c;业务大致可以分为两类 —— 搭建派 和 源码派。 这两者互不冲突&#xf…

【Db First】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…

搭建私有云存储

1、安装LNMP环境 yum install nginx -y yum install -y nginx mariadb-server php php-fpm php-mysqlnd systemctl restart nginx.service --- 启动Nginx systemctl start mariadb.service ---启动数据库 mysql -e create database lxdb character set utf8 ---创建数据库 my…

YOLO 标注工具 AutoLabel 支持 win mac linux

常见的标注工具&#xff0c;功能基础操作繁琐&#xff0c;无复制粘贴&#xff0c;标签无法排序修改&#xff0c;UI不美观&#xff0c;bug修正不及时&#xff0c;没有集成识别、训练、模型导出… 怎么办呢&#xff1f;AutoLabel它来了 Quick Start 一图胜千言 图像标注 支持YOL…

qt QGraphicsPolygonItem详解

1、概述 QGraphicsPolygonItem是Qt框架中QGraphicsItem的一个子类&#xff0c;它提供了一个可以添加到QGraphicsScene中的多边形项。通过QGraphicsPolygonItem&#xff0c;你可以定义和显示一个多边形&#xff0c;包括其填充颜色、边框样式等属性。QGraphicsPolygonItem支持各…