【Linux signal】

news2024/11/15 7:53:57

Linux signal

  • 一、信号分类
  • 二、什么是信号集?
  • 三、信号的3个处理过程
    • 3.1 发送信号
      • 3.1.1 向自身发送信号(raise)
      • 3.1.2 向别的进程发送信号(kill)
      • 3.1.3 发送闹钟信号(alarm)
    • 3.2 接收(注册)信号
    • 3.3 处理信号

在Linux操作系统中,SIGUSR1和SIGUSR2是用户定义的信号,它们可以由进程发送给另一个进程,或者由进程发送给自己,用于实现用户间的通信或执行特定的处理。这些信号可以被捕获、忽略或采取默认动作。

一、信号分类

Linux系统共定义了64种信号,分为两大类:可靠信号与不可靠信号,前32种信号为不可靠信号,后32种为可靠信号。

  • 不可靠信号: 也称为非实时信号,不支持排队,信号可能会丢失, 比如发送多次相同的信号, 进程只能收到一次. 信号值取值区间为1~31;
  • 可靠信号: 也称为实时信号,实时信号的关键特点是它们会排队,如果一个信号在被处理之前多次发送,它们会按照发送顺序排队,直到被处理。信号不会丢失, 发多少次, 就可以收到多少次. 信号值取值区间为32~64。

在终端,可通过

  • kill -l 查看所有的signal信号,以及信号的默认动作。
  • man 7 signal 可查看man手册中关于signal的详细介绍

相比于非实时信号,实时信号有如下特点:

  • 信号可以排队。
  • 信号可以等待:发送实时信号时,如果目标进程暂时不处理信号(例如,它正处于不可中断的睡眠状态),信号可以在队列中等待,直到进程准备好处理它们。
  • 信号可以携带信息:发送实时信号时,可以携带额外的数据(通过sigqueue系统调用),接收方可以通过sigaction结构中的sa_sigaction字段获取这些数据。

SIGUSR1(User-defined signal 1)

  1. 这是一个实时信号,意味着如果向进程发送多个SIGUSR1信号,它们不会被合并,而是按照发送的顺序排队。
  2. SIGUSR1的默认动作是终止进程,但是进程可以捕获这个信号并为其分配一个信号处理函数,以执行特定的任务。
  3. 父进程通常使用SIGUSR1信号来通知子进程进行某些操作,例如重新打开日志文件、重新加载配置文件等。

SIGUSR2(User-defined signal 1)
4. 与SIGUSR1类似,SIGUSR2也是一个实时信号,可以用于用户自定义目的。
5. 默认情况下,SIGUSR2的默认动作也是终止进程,但进程可以选择捕获这个信号并定义自己的处理函数。
6. 开发者可以根据需要使用SIGUSR2信号,例如,可以让进程在收到信号时切换到不同的运行模式或执行特定的维护任务。

二、什么是信号集?

信号集(signal set)是指一个能够包含多个信号的数据类型,它用于表示一组信号。信号集通常用于信号掩码(signal mask)和信号处理的相关操作中。进程可以使用信号集来指定它希望阻塞的信号(sigprocmask)、它希望等待的信号(sigwait或sigtimedwait),或者它想要处理的信号(sigpending)。

在Linux中,信号集通过sigset_t类型来表示,这是一个能够包含所有信号的数据类型。信号集相关的操作可以通过一组函数来进行,这些函数包括:

函数作用
sigemptyset初始化一个信号集,使其不包含任何信号。
sigfillset初始化一个信号集,使其包含所有信号。
sigaddset向信号集中添加一个特定的信号。
sigdelset从信号集中删除一个特定的信号。
sigismember检查一个信号是否是信号集的成员。

三、信号的3个处理过程

  • 发送信号: 有对应的发送函数
  • 接收信号: 有对应的接收函数
  • 处理信号: 有对应的处理函数

下面逐一讲解:

3.1 发送信号

3.1.1 向自身发送信号(raise)

#include <stdio.h>
#include <signal.h>
int main() {
        raise(SIGKILL);
        //raise(SIGSTOP);
        printf("process run ok\n");
        return 0;
}

在这里插入图片描述

编译运行这一段程序,可见,程序还没打印字符串就结束了。可见这个函数可以用于程序自杀。

3.1.2 向别的进程发送信号(kill)

写个死循环的代码让他运行着,然后编译下面的函数,kill掉目标死循环进程。

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/types.h>

int main(int argc, char *argv[]) {
        char *endptr = NULL;
        unsigned long int val;

        val = strtoul(argv[1], &endptr, 10);
        printf("val = %d \n",val);
        kill(val, SIGKILL);
        printf("Has kill\n");
        return 0;
}

在这里插入图片描述
这里之所以输入6564dfd是为了试验一下strtoul函数

3.1.3 发送闹钟信号(alarm)

使用 alarm 来定时 seconds 发送一个 SIGALRM 信号,该信号的默认动作是终止进程:
函数格式:
unsigned int alarm(unsigned int seconds);

这个闹钟函数还挺有意思,下次专门写个博客描述一下。

3.2 接收(注册)信号

有signal函数和比较新的sigaction函数。

3.3 处理信号

处理信号一般分三类:忽略,默认处理、自定义处理。
如果设置为自定义处理,要保证信号处理函数为可重入函数。何为可重入函数???
可重入函数就是可以被中断的函数,不可重入的函数会由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断,返回可能会出现问题。在信号处理函数中还要做到:
1、不要使用带有全局静态数据结构的函数
2、不要调用 malloc 和 free
3、不要调用标准 IO 函数

参考:read://https_dlonng.com/?url=https%3A%2F%2Fdlonng.com%2Fposts%2Fsignal

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

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

相关文章

仅需一块 4GB 的 GPU ,就能运行开源大语言模型:Llama3 70B

最强的开源大语言模型 Llama3 已经发布一段时间了&#xff0c;一些盆友资源有限&#xff0c;私信询问是否可以使用 4GB 的 VRAM 在本地运行 Llama3 70B。 与 GPT-4 相比&#xff0c;Llama3 的性能如何&#xff1f;Llama3 使用了哪些关键的前沿技术使其变得如此强大&#xff1f…

CIM模型

CIM 是 Esri 制图信息模型。 它是一个地图内容规范,用于记录在保存、读取、引用或打开时如何永久保留描述不同项目组件的信息。 该规范以 JSON 表示,适用于 ArcGIS 应用程序和 API 中的地图、场景、布局、图层、符号和样式。 CIM 不仅限于制图设置。 要了解属性的组织方式以及…

【C++题解】1699 - 输出是2的倍数,但非3的倍数的数

问题&#xff1a;1699 - 输出是2的倍数&#xff0c;但非3的倍数的数 类型&#xff1a;循环 题目描述&#xff1a; 请从键盘读入一个整数 n&#xff0c;输出 1∼n 中所有是 2 的倍数&#xff0c;但非 3 的倍数的数&#xff0c;每行 1个。 比如&#xff0c;读入一个整数10 &…

六招搞定,SPA单页面加载速度慢的问题。

众所周知&#xff0c;SPA页面有很多优点&#xff0c;但是首屏加载慢的问题一直被诟病&#xff0c;本文介绍几种解决策略&#xff0c;希望对老铁们有所帮助。 一、SPA页面的独有优势 1. 更快的用户体验&#xff1a; SPA在加载初始页面后&#xff0c;可以在用户与应用程序交互…

k8s dashboard安装

本案例&#xff0c;k8s版本为v1.22.17&#xff0c;所以安装v2.7.0版本的dashboard 1、下载dashboard的yaml文件 curl -O https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml 2、修改recommended.yaml文件 修改定义的Service&…

HDFS 组织架构

优质博文&#xff1a;IT-BLOG-CN 一、HDFS 概述 HDFS 产生背景&#xff1a; 随着数据量越来越多&#xff0c;一个系统存储不下所有的数据&#xff0c;那么就需要分配到多个操作系统的磁盘中进行存储&#xff0c;但是不方便管理和维护&#xff0c;迫切需要一种系统来管理多台机…

蜜罐技术是一种什么防御技术?实现原理是什么?

前言&#xff1a;蜜罐技术的出现改变了这种被动态势&#xff0c;它通过吸引、诱骗攻击者&#xff0c;研究学习攻击者的攻击目的和攻击手段&#xff0c;从而延缓乃至阻止攻击破坏行为的发生&#xff0c;有效保护真实服务资源。 自网络诞生以来&#xff0c;攻击威胁事件层出不穷…

设置虚拟机为静态IP

为什么需要设置静态IP&#xff1a;有时候我们在练习项目的时候&#xff0c;明明已经连接好了虚拟机的ip&#xff0c;某一天突然连接不上了&#xff0c;通过ifconfig命令查看发现虚拟机的ip发生了变化&#xff0c;导致之前做的内容都需要重新布置&#xff0c; 一、设置静态IP …

AI办公自动化:用kimi将子文件夹里面的文件批量重命名

工作任务和目标&#xff1a;一个文件夹下有多个子文件夹 子文件夹中有多个srt文件&#xff0c;需要删除文件名中的english和空格 第一步&#xff0c;在kimi中输入如下提示词&#xff1a; 你是一个Python编程高手&#xff0c;一步步的思考&#xff0c;来编写下面任务的Python脚…

如何使用pycrypt加密工具测试反病毒产品的检测性能

关于pycrypt pycrypt是一款基于Python 3语言开发的加密工具&#xff0c;广大研究人员可以使用该工具来尝试绕过任意类型的反病毒产品&#xff0c;以检测目标反病毒产品的安全性能。 功能介绍 1、目前已知反病毒产品检测率为0/40&#xff1b; 2、支持绕过任意EDR解决方案&#…

【C++】类与对象——继承详解

目录 一、继承的概念 二、继承关系和访问限定符 三、基类和派生类对象赋值转换 四、继承中的作用域 五、派生类的默认成员函数 六、复杂的菱形继承及菱形虚拟继承 一、继承的概念 继承是面向对象程序设计中很重要的一个概念。继承允许我们依据另一个类来定义一个类&#…

python01

一、Python介绍 Python是一个计算编程语言&#xff0c;可以实现计算程序开发&#xff0c;也可以用于数据处理。SQL语言只能用于结构化数据的处理。Python的比SQL应用更广泛。 1990年推广Python&#xff0c;最初是应用于运维开发&#xff0c;随着不断更新迭代Python的功能更加丰…

AWS Elastic Beanstalk 监控可观测最佳实践

一、概述 Amazon Web Services (AWS) 包含一百多种服务&#xff0c;每项服务都针对一个功能领域。服务的多样性可让您灵活地管理 AWS 基础设施&#xff0c;然而&#xff0c;判断应使用哪些服务以及如何进行预配置可能会非常困难。借助 Elastic Beanstalk&#xff0c;可以在 AW…

仿《Q极速体育》NBACBA体育直播吧足球直播综合体育直播源码

码名称&#xff1a;仿《Q极速体育》NBACBA体育直播吧足球直播综合体育直播源码 开发环境&#xff1a;帝国cms7.5 空间支持&#xff1a;phpmysql 仿《Q极速体育》NBACBA体育直播吧足球直播综合体育直播源码自动采集 - 我爱模板网源码名称&#xff1a;仿《Q极速体育》NBACBA体育直…

【机器学习与大模型】驱动下的应用图像识别与处理

摘要&#xff1a; 本文深入探讨了机器学习在图像识别与处理领域的应用&#xff0c;特别是在大模型的推动下所取得的巨大进展。详细阐述了图像识别与处理的基本原理、关键技术&#xff0c;以及机器学习算法和大模型如何提升其性能和准确性。通过实际案例分析了其在多个领域的广泛…

大模型分布式训练并行技术分享

目前业内解决大模型问题&#xff0c;基本以多节点、分布式方案为主。分布式方案具体的实施时&#xff0c;又分为数据并行、参数并行、流水线并行等&#xff0c;针对具体的业务场景采取合适的并行方案方可带来更高的效率。 后续结合业内主流的分布式框架&#xff0c;具体介绍各种…

网络编程的基础知识(适合新手)

网络编程 在Java中&#xff0c;网络编程是指使用Java语言进行网络通信的编程技术。这种技术使得位于不同地理位置的计算机能够通过网络进行通信&#xff0c;实现资源共享和信息传递。 一、定义 Java网络编程是Java语言在网络通信方面的应用&#xff0c;它利用Java提供的网络…

[图解]产品经理-竞赛题解析:阿布思考法和EA

1 00:00:00,410 --> 00:00:02,330 今天我们来说一道 2 00:00:02,610 --> 00:00:04,690 前些天出的一道竞赛题 3 00:00:07,250 --> 00:00:09,310 怎么样用阿布思考法 4 00:00:09,320 --> 00:00:10,540 来改进EA 5 00:00:11,690 --> 00:00:12,620 题目是这样的…

APP安全测试汇总【网络安全】

APP安全测试汇总 一.安装包签名和证书 1.问题说明 检测 APP 移动客户端是否经过了正确签名&#xff0c;通过检测签名&#xff0c;可以检测出安装包在签名后是否被修改过。如 果 APP 使⽤了 debug 进⾏证书签名&#xff0c;那么 APP 中⼀部分 signature 级别的权限控制就会失效…

MTK下载AP

只升级选Firemare Upgrade &#xff0c;点下载后&#xff0c;关机下插入USB