【Linux signal】

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

学习Uni-app开发小程序Day18

昨天学习了使用轮播显示图片和文字&#xff0c;轮播方式纵向和横向。今天使用扩展组件和scroll-view显示图片&#xff0c;使用scroll-view的grid方式、插槽slot、自定义组件、磨砂背景定位布局做专题组件 这就是需要做成的效果&#xff0c;下面将一步一步的完成。 首先&#x…

在家庭影院音频中应用的D类音频放大器

家庭影院的主要组成部分包括显示设备、音响设备、信号源和接线设备等。家庭影院的音响信号需要进行处理和输出&#xff0c;以获得高质量的音效。音响设备通常需要一台功率适当的数字、模拟混合的处理器&#xff0c;对音源进行降噪、均衡、扩展等处理操作&#xff0c;以达到高品…

企业微信hook接口协议,ipad协议http,根据手机号搜索联系人

根据手机号搜索联系人 参数名必选类型说明uuid是String每个实例的唯一标识&#xff0c;根据uuid操作具体企业微信 请求示例 {"uuid":"3240fde0-45e2-48c0-90e8-cb098d0ebe43","phoneNumber":"1357xxxx" } 返回示例 {"data&q…

基于PLC的地铁屏蔽门系统设计_kaic

摘 要 可编程序控制器&#xff08;PLC&#xff09;是近年来发展迅速的工业控制装置&#xff0c;它因为具有强大的稳定性、安全性以及维修便利等优点而应用于工业企业各个领域。地铁作为当代一二线城市最重要的公共交通工具&#xff0c;其安全性以及稳定性至关重要。 以PLC为控…

MHDDoS:一个包含了56种技术的DDoS测试工具

关于MHDDoS MHDDoS是一款功能强大的DDoS服务器/站点安全测试工具&#xff0c;该工具包含56种技术&#xff0c;可以帮助广大研究人员对自己的服务器或网站执行DDoS安全测试。 工具技术 Layer7 GET | GET 泛洪 POST | POST 泛洪 OVH | 绕过OVH RHEX | 随机HEX STOMP | 绕过chk_…

使用pyqt绘制一个爱心!

使用pyqt绘制一个爱心&#xff01; 介绍效果代码 介绍 使用pyqt绘制一个爱心&#xff01; 效果 代码 import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget from PyQt5.QtGui import QPainter, QPen, QBrush, QColor from PyQt5.QtCore import Qt, Q…

Spring AI实战之二:Chat API基础知识大串讲(重要)

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码)&#xff1a;https://github.com/zq2599/blog_demos Spring AI实战全系列链接 Spring AI实战之一&#xff1a;快速体验(OpenAI)Spring AI实战之二&#xff1a;Chat API基础知识大串讲(重要)SpringAIOllama三部曲…

three.js能实现啥效果?看过来,这里都是它的菜(09)

Hi&#xff0c;这是第九期了&#xff0c;继续分享three.js在可视化大屏中的应用&#xff0c;本期分享位移动画的实现。 位移动画 Three.js位移动画是指在Three.js中实现物体位置的平移动画。通过改变物体的位置属性&#xff0c;可以实现物体沿着指定路径从一个位置移动到另一…

ros2编写pcl节点加载pcd文件

初次学习ros2和pcl&#xff0c;尝试在ros2中创建节点&#xff0c;加载pcd文件&#xff0c;并在rviz中进行可视化&#xff0c;记录一下整个过程。 编辑环境 ubuntu20.04 ros2_foxy 创建节点 mkdir -p proj_ws_pcl/src #创建工程文件夹 cd proj_ws_pcl/src #创建源码文件夹 …

车载电子电器架构 —— 智能座舱技术

车载电子电器架构 —— 智能座舱技术 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消耗你的…

构建php环境

目录 php简介 官网php安装包 选择下载稳定版本 &#xff08;建议使用此版本&#xff0c;文章以此版本为例&#xff09; 安装php解析环境 准备工作 安装依赖 zlib-devel 和 libxml2-devel包。 安装扩展工具库 安装 libmcrypt 安装 mhash 安装mcrypt 安装php 选项含…

Next.js里app和pages文件夹的区别

最近开始学 Next.js&#xff0c;因为纯自学&#xff0c;有时候网上找到的学习资料都是几年前的&#xff0c;难免会有点 outdated&#xff0c;因此当自己创建的项目结构和视频里呈现的结构不一致时&#xff0c;难免会有点困惑。 例如&#xff0c;今天遇到的第一个问题就是&…

光速入门python的OpenCV

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理python的OpenCV模块的关键知识点 争取用最短的时间入门OpenCV 并且做到笔记功能直接复制使用 OpenCV简介 不浪费时间的介绍: 就是类似于ps操作图片。 至于为什么不直接用ps&#xff0c;因为只有程序能…

社交媒体数据恢复:绿洲

本教程将向您展示如何在绿洲平台上备份和恢复数据&#xff0c;但不涉及推荐任何具体的数据恢复软件。 一、绿洲平台数据备份 为了确保数据的安全&#xff0c;在日常使用过程中&#xff0c;我们需要定期备份绿洲平台上的数据。以下是备份绿洲平台数据的步骤&#xff1a; 登录绿…

【SpringCloud】服务注册与发现

目录 Eureka/注册中心简介模式 使用Eureka实现注册中心1.创建一个名称为demo-eureka-server的Spring Boot项目2.添加项目依赖3. 在启动类添加启动注解4.添加配置信息Eureka的自我保护机制为Eureka Server添加用户认证1.添加依赖2. 添加配置信息3.添加放行代码4.启动服务&#x…

springboot+vue+mybatis校园兼职平台+PPT+论文+讲解+售后

社会的发展和科学技术的进步&#xff0c;互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜爱&#xff0c;也逐渐进入了每个学生的使用。互联网具有便利性&#xff0c;速度快&#xff0c;效率高&#xff0c;成本低等优点。 因此&#xff0c;构建符合自己要…

VMware虚拟机中ubuntu使用记录(10)—— 如何在Ubuntu18.04中使用自己的单目摄像头运行ORB_SLAM3(亲测有效,踩坑记录)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、ORB_SLAM3源码编译二、ORB_SLAM3实时单目相机测试1. 查看摄像头的话题2. 运行测试 三. 运行测试可能的报错1. 报错一(1) 问题描述(2) 原因分析(3) 解决 2. …

得帆信息PMO总监李健达受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 上海得帆信息技术有限公司aPaaS业务线副总裁、PMO总监李健达先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾&#xff0c;演讲议题为“AI时代的PMO工作法”。大会将于6月29-30日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#x…

天干物燥小心火烛-智慧消防可视化大屏,隐患防治于未然。

智慧消防可视化大屏通常包括以下内容&#xff1a; 1.实时监控&#xff1a; 显示消防设备、传感器、监控摄像头等设备的实时状态和数据&#xff0c;包括火灾报警、烟雾报警、温度报警等。 2.建筑结构&#xff1a; 显示建筑物的结构图和平面图&#xff0c;包括楼层分布、消防通…