Linux中信号机制

news2024/11/23 17:02:25

信号机制

信号的概念

  • 概念:信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式
    所有信号的产生及处理全部都是由内核完成的
  • 信号的产生:
    1 按键产生
    2 系统调用函数产生(比如raise, kill)
    3 硬件异常
    4 命令行产生 (kill)
    5 软件条件(比如被0除,访问非法内存等)
  • 信号处理方式:
    1 缺省方式:默认的行为来做
    2 忽略信号:按照自己原本的行为去做
    3 捕捉信号:捕捉到信号后,不按照信号的指示,而是改变行为
  • 常用信号:
    信号名 含义 默认操作
    SIGHUP 该信号在用户终端关闭时产生,通常是发给和该
    终端关联的会话内的所有进程 终止
    SIGINT 该信号在用户键入INTR字符(Ctrl-C)时产生,内
    核发送此信号送到当前终端的所有前台进程 终止
    SIGQUIT 该信号和SIGINT类似,但由QUIT字符(通常是
    Ctrl-)来产生 终止
    SIGILL 该信号在一个进程企图执行一条非法指令时产生 终止
    SIGSEV 该信号在非法访问内存时产生,如野指针、缓
    冲区溢出 终止
    SIGPIPE 当进程往一个没有读端的管道中写入时产生,代
    表“管道断裂” 终止
    信号名 含义 默认操作
    SIGKILL 该信号用来结束进程,并且不能被捕捉和忽略 终止(例如:kill -9 pid)
    SIGSTOP 该信号用于暂停进程,并且不能被捕捉和忽略 暂停进程
    SIGTSTP 该信号用于暂停进程,用户可键入SUSP字符(
    通常是Ctrl-Z)发出这个信号 暂停进程
    SIGCONT 该信号让进程进入运行态 继续运行
    SIGALRM 该信号用于通知进程定时器时间已到 终止
    SIGUSR1/2 该信号保留给用户程序使用 终止
    SIGCHLD 是子进程状态改变发给父进程的。 忽略
  • 信号相关命令
    kill [-signal] pid
    killall [-u user | prog]

信号发送和定时器

  • 信号的函数:
    int kill(pid_t pid, int signum)
    功能:发送信号
    参数:
    pid: > 0:发送信号给指定进程
    = 0:发送信号给跟调用kill函数的那个进程处于同一进程组的进程。
    < -1: 取绝对值,发送信号给该绝对值所对应的进程组的所有组员。
    = -1:发送信号给,有权限发送的所有进程。
    signum:待发送的信号
    int raise(int sig);
    给自己发信号,等价于kill(getpid(), signo);
  • 信号相关函数-alarm/pause
    unsigned int alarm(unsigned int seconds);
    功能:定时发送SIGALRM给当前进程
    参数: seconds:定时秒数
    返回值:上次定时剩余时间。
    int pause(void)
    进程一直被阻塞,直到被信号中断
    被信号中断后返回-1,errno为EINTR
  • ualarm函数(循环发送)
    useconds_t ualarm(useconds_t usecs, useconds_t interval);
    以useconds为单位,第一个参数为第一次产生时间,第二个参数为间隔产生
    int setitimer(int which, const struct itimerval *new_value, struct itimerval old_value);
    功能:定时的发送alarm信号
    参数:
    which:
    ITIMER_REAL:以逝去时间递减。发送SIGALRM信号
    ITIMER_VIRTUAL: 计算进程(用户模式)执行的时间。 发送SIGVTALRM信号
    ITIMER_PROF: 进程在用户模式(即程序执行时)和核心模式(即进程调度用时)均计算时间。 发送SIGPROF信号
    new_value: 负责设定 timout 时间
    old_value: 存放旧的timeout值,一般指定为NULL
    struct itimerval {
    struct timeval it_interval; // 闹钟触发周期
    struct timeval it_value; // 闹钟触发时间
    };
    struct timeval {
    time_t tv_sec; /
    seconds /
    suseconds_t tv_usec; /
    microseconds */
    };
  • 信号的捕捉
    在这里插入图片描述
  • 信号捕捉过程:
  1. 定义新的信号的执行函数handle。
  2. 使用signal/sigaction 函数,把自定义的handle和指定的信号相关联。
  • signal函数:
    typedef void (*sighandler_t)(int);
    sighandler_t signal(int signum, sighandler_t handler);
    功能:捕捉信号执行自定义函数
    返回值:成功时返回原先的信号处理函数,失败时返回SIG_ERR
    参数:
    signo 要设置的信号类型
    handler 指定的信号处理函数: SIG_DFL代表缺省方式; SIG_IGN 代表忽略信号;
    系统建议使用sigaction函数,因为signal在不同类unix系统的行为不完全一样。
  • 函数如下:
    在这里插入图片描述
  • 上述代码就是把ctrl + c的信号变为自定义的信号函数,就是执行自己设定的handle函数

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

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

相关文章

代码随想录刷题第36天

今天的题目都与重叠区间有关。第一题是无重叠区间https://leetcode.cn/problems/non-overlapping-intervals/description/&#xff0c;与昨天用箭射气球的逻辑相同&#xff0c;按左边界排序&#xff0c;找出重叠区间数量即可。 class Solution { public: static bool cmp(cons…

C#使用 AutoUpdater.NET 实现程序自动更新

写在前面 开发桌面应用程序的时候&#xff0c;经常会因为新增功能需求或修复已知问题&#xff0c;要求客户更新应用程序&#xff0c;为了更好的服务客户&#xff0c;通常会在程序启动时判断版本变更情况&#xff0c;如发现新版本则自动弹出更新对话框&#xff0c;提醒客户更新…

ART-Pi LoRa开发套件 不完全教程

1 前言 ART-Pi LoRa 开发套件(LSD4RFB-2EVKM0201)是利尔达科技与睿赛德科技联合出品的一套面向物联网开发者的 LoRa 产品原型设计工具包&#xff0c;搭配ART-Pi主板使用&#xff0c;支持利尔达全系 LoRa 节点与网关模块&#xff0c;拥有丰富的可选配件&#xff0c;用户 可按需…

普中51单片机学习(十一)

独立按键 独立按键原理 按键在闭合和断开时触电存在抖动现象 硬件消抖电路如下 实验代码 #include "reg52.h" typedef unsigned char u8; typedef unsigned int u16;void delay(u16 i) {while(i--); } sbit ledP2^0; sbit k1P3^1;void keypro() {if(k10){delay(1…

C#分部类、分割类的用法,及用分割类设计一个计算器

目录 一、涉及到的知识点 1.分部类 2.分部类主要应用在以下两个方面 3.合理使用分部类分割类 4.事件处理程序 5.Math.Ceiling方法 6.Text.Contains() 7.pictureBox.Tag属性 二、实例 1.源码 2.生成效果 在开发一些大型项目或者特殊部署时&#xff0c;可能需要…

Django实战:部署项目 【资产管理系统】,Django完整项目学习研究(项目全解析,部署教程,非常详细)

导言 关于Django&#xff0c;我已经和大家分享了一些知识&#xff0c;考虑到一些伙伴需要在实际的项目中去理解。所以我上传了一套Django的项目学习源码&#xff0c;已经和本文章进行了绑定。大家可以自行下载学习&#xff0c;考虑到一些伙伴是初学者&#xff0c;几年前&#…

C. LR-remainders

思路&#xff1a;正着暴力会tle&#xff0c;所以我们可以逆着来。 代码&#xff1a; #include<bits/stdc.h> #define int long long #define x first #define y second #define endl \n #define pq priority_queue using namespace std; typedef pair<int,int> p…

HarmonyOS开发篇—数据管理(分布式数据服务)

分布式数据服务概述 分布式数据服务&#xff08;Distributed Data Service&#xff0c;DDS&#xff09; 为应用程序提供不同设备间数据库数据分布式的能力。通过调用分布式数据接口&#xff0c;应用程序将数据保存到分布式数据库中。通过结合帐号、应用和数据库三元组&#xf…

Java实现Redis延时队列

“如何实现Redis延时队列”这个面试题应该也是比较常见的&#xff0c;解答如下&#xff1a; 使用sortedset&#xff08;有序集合&#xff09; &#xff0c;拿时间戳作为 score &#xff0c;消息内容作为key 调用 zadd 来生产消息&#xff0c;消费者用zrangebyscore 指令获取 N …

js_三种方法实现深拷贝

深拷贝&#xff08; 递归 &#xff09; 适用于需要完全独立于原始对象的场景&#xff0c;特别是当对象内部有引用类型时&#xff0c;为了避免修改拷贝后的对象影响到原始对象&#xff0c;就需要使用深拷贝。 // 原始对象 const obj { uname: Lily,age: 19,hobby: [乒乓球, 篮球…

AI论文速读 |【综述】深度学习在多元时间序列插补的应用

论文标题&#xff1a; Deep Learning for Multivariate Time Series Imputation: A Survey 链接&#xff1a;https://arxiv.org/abs/2402.04059 作者&#xff1a;Jun Wang ; Wenjie Du ; Wei Cao ; Keli Zhang ; Wenjia Wang ; Yuxuan Liang ; Qingsong Wen 机构&#xff1a…

『论文阅读|研究用于视障人士户外障碍物检测的 YOLO 模型』

研究用于视障人士户外障碍物检测的 YOLO 模型 摘要1 引言2 相关工作2.1 障碍物检测的相关工作2.2 物体检测和其他基于CNN的模型 3 问题的提出4 方法4.1 YOLO4.2 YOLOv54.3 YOLOv64.4 YOLOv74.5 YOLOv84.6 YOLO-NAS 5 实验和结果5.1 数据集和预处理5.2 训练和实现细节5.3 性能指…

unity 使用VS Code 开发,VS Code配置注意事项

vscode 对应的插件&#xff08;unity开发&#xff09; 插件&#xff1a;.Net Install Tool,c#,c# Dev Kit,IntelliCode For C# Dev Kit,Unity,Unity Code Snippets 本人现在是用了这些插件 unity需要安装Visual Studio Editor 1、.Net Install Tool 设置 需要在设置里面配置…

Idea启动Gradle报错: Please, re-import the Gradle project and try again

Idea启动Gradle报错&#xff1a;Warning:Unable to make the module: reading, related gradle configuration was not found. Please, re-import the Gradle project and try again. 解决办法&#xff1a; 开启步骤&#xff1a;View -> Tool Windows -> Gradle 点击refe…

NX/UG二次开发—CAM—平面铣边界准确设置方法

大家在对平面铣设置边界时&#xff0c;经常遇到边界方向与自己期望的不一致&#xff0c;有些人喜欢用检查刀路是否过切来判断&#xff0c;但是对于倒角、负余量等一些情况&#xff0c;刀路本来就是过切的。对于多边界&#xff0c;可以根据选择的曲线来起点和面的方向来确定&…

多维时序 | Matlab实现LSTM-Mutilhead-Attention长短期记忆神经网络融合多头注意力机制多变量时间序列预测模型

多维时序 | Matlab实现LSTM-Mutilhead-Attention长短期记忆神经网络融合多头注意力机制多变量时间序列预测模型 目录 多维时序 | Matlab实现LSTM-Mutilhead-Attention长短期记忆神经网络融合多头注意力机制多变量时间序列预测模型预测效果基本介绍程序设计参考资料 预测效果 基…

UI美化stylesheet

一、网上找到自己喜欢的图标 大家可以每个图标类型找出三种不同的颜色&#xff0c;方便后续美化效果&#xff0c;这里我每种只找了一个。&#xff08;随便找的&#xff0c;最后效果不好看&#xff09; 将这个文件夹复制到项目的文件夹中。 然后右键Add New…选择QT&#xff0c…

【python】网络爬虫与信息提取--scrapy爬虫框架介绍

一、scrapy爬虫框架介绍 scrapy是一个功能强大的网络爬虫框架&#xff0c;是python非常优秀的第三方库&#xff0c;也是基于python实现网络爬虫的重要技术路线。scrapy不是哟个函数功能库&#xff0c;而是一个爬虫框架。 爬虫框架&#xff1a;是实现爬虫功能的一个软件结构和功…

Spring Boot应用集成Actuator端点解决未授权访问的漏洞

一、前言 我们知道想要实时监控我们的应用程序的运行状态&#xff0c;比如实时显示一些指标数据&#xff0c;观察每时每刻访问的流量&#xff0c;或者是我们数据库的访问状态等等&#xff0c;需要使用到Actuator组件&#xff0c;但是Actuator有一个访问未授权问题&#xff0c;…

C# CAD交互界面-自定义面板集-comboBox选择图层

运行环境Visual Studio 2022 c# cad2016 一、代码说明 SelectLayer方法是一个自定义的AutoCAD命令方法&#xff0c;通过[CommandMethod("SelectLayer")]进行标记。方法首先获取当前活动文档&#xff0c;并检查是否有效。创建一个名为"SelectLayer"的Pale…