当前位置: 首页 > news >正文

信号 捕捉

signal 函数

作用:注册一个信号捕捉函数(注册而非创建)

原型

  • sighandler_t signal(int signum, sighandler_t handler);
  • typedef void (*sighandler_t)(int);

案例一: signal函数 捕捉 ctrl+c 触发事件

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<errno.h>
#include<pthread.h>
#include<signal.h>void sys_err(const char *str)
{perror(str);exit(1);
}void sig_catch(int signo)
{printf("catch you!!! %d\n", signo);return;
}int main(int argc, char *argv[])
{signal(SIGINT, sig_catch);//  ////while(1);return 0;
}

 sigaction 函数

作用:修改信号处理动作(通常在Linux用其来注册一个信号的捕捉函数)

原型:int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); 

                成功:0;失败:-1,设置errno

        参数:

                act:传入参数,新的处理方式。

                oldact:传出参数,旧的处理方式

struct sigaction结构体

        

        struct sigaction

        {

                void     (*sa_handler)(int);

                void     (*sa_sigaction)(int, siginfo_t *, void *);

                sigset_t   sa_mask;

                int       sa_flags;

                void     (*sa_restorer)(void);

            };

         sa_restorer:该元素是过时的,不应该使用,POSIX.1标准将不指定该元素。(弃用)

         sa_sigaction:当sa_flags被指定为SA_SIGINFO标志时,使用该信号处理程序。(很少使用) 

重点掌握:

         ① sa_handler:指定信号捕捉后的处理函数名(即注册函数)。也可赋值为SIG_IGN表忽略 或 SIG_DFL表执行默认动作

         ② sa_mask: 调用信号处理函数时,所要屏蔽的信号集合(信号屏蔽字)。注意:仅在处理函数被调用期间屏蔽生效,是临时性设置。

         ③ sa_flags:通常设置为0,表使用默认属性。

案例二: sigaction 函数 捕捉 ctrl+c 触发事件 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<errno.h>
#include<pthread.h>
#include<signal.h>void sys_err(const char *str)
{perror(str);exit(1);
}void sig_catch(int signo)  //捕捉函数(回调函数)
{if(signo == SIGINT){printf(" SIGINT  catch you!!! %d\n", signo);} else if(signo == SIGQUIT){printf(" SIGQUIT  catch you!!! %d\n", signo);}return;
}int main(int argc, char *argv[])
{struct sigaction act, oldact;act.sa_handler = sig_catch;  //设置回调函数sigemptyset(&(act.sa_mask)); //设置屏蔽字 清空sa_mask 在捕捉函数期间生效act.sa_flags = 0;            //设置默认属性int ret = sigaction(SIGINT, &act, &oldact); //注册信号捕捉函数 ctrl + cif(ret == -1){sys_err("sigaction error");}ret = sigaction(SIGQUIT, &act, &oldact); //注册信号捕捉函数 ctrl + \while(1);return 0;
}

信号捕捉特性

  1. 进程正常运行时,默认PCB中有一个信号屏蔽字,假定为☆,它决定了进程自动屏蔽哪些信号。当注册了某个信号捕捉函数,捕捉到该信号以后,要调用该函数。而该函数有可能执行很长时间,在这期间所屏蔽的信号不由☆来指定。而是用sa_mask来指定。调用完信号处理函数,再恢复为☆。
  2. XXX信号捕捉函数执行期间,XXX信号自动被屏蔽。
  3. 阻塞的常规信号不支持排队,产生多次只记录一次。(后32个实时信号支持排队)

案例三: 验证信号捕捉特性

 从结果很容易看出在信号处理函数执行期间,该信号多次递送,那么只在处理函数之行结束后,处理一次。

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <signal.h>
void do_sig(int a)
{printf("hello world!\n");sleep(10);//休息10秒 让函数执行久一点
}
int main(void)
{      if (signal(SIGINT, do_sig)== SIG_ERR){perror("signal");exit(1);}while (1) {printf("---------------------\n");sleep(1);}return 0;
}

 内核实现信号捕捉过程

相关文章:

信号 捕捉

signal 函数 作用&#xff1a;注册一个信号捕捉函数&#xff08;注册而非创建&#xff09; 原型&#xff1a; sighandler_t signal(int signum, sighandler_t handler);typedef void (*sighandler_t)(int);案例一&#xff1a; signal函数 捕捉 ctrlc 触发事件 #include<std…...

sqlserver中判断是否存在的方法

自定义变量 declare age int declare name varchar(20) set name‘张三’ --用set 方法给变量赋值 注&#xff1a; 此方法一次只能给一个变量赋值 select ageage from client where [name]name --查询客户张三的年龄赋值给age变量 注&#xff1a;此方法能一次多个变量赋值 …...

基于Kettle跑批的案例说明

需求概述 通过动态配置表的方式完成在kettle里动态配置参数&#xff0c;并调用ktr&#xff0c;实现跑批的目的。 问题分析 定义一个ktr读取配置表的信息并将拷贝记录到结果定义一个ktr从结果里获取记录并设置变量定义业务ktr&#xff08;即按照业务需要开发的…...

2023 最新版网络安全保姆级自学指南

前言 如今&#xff0c;组织的信息系统和数据面临着许多威胁。而人们了解网络安全的所有基本要素是应对这些威胁的第一步。 网络安全是确保信息完整性、机密性和可用性(ICA)的做法。它代表了应对硬盘故障、断电事故&#xff0c;以及来自黑客或竞争对手攻击等防御和恢复能力。而…...

Chapter9.3:线性系统稳定性分析及综合实例

该系列博客主要讲述Matlab软件在自动控制方面的应用&#xff0c;如无自动控制理论基础&#xff0c;请先学习自动控制系列博文&#xff0c;该系列博客不再详细讲解自动控制理论知识。 自动控制理论基础相关链接&#xff1a;https://blog.csdn.net/qq_39032096/category_10287468…...

EXCEL 在复杂查询时摒弃vlookup() sumif() 等公式,而使用数据透视表的初步学习

1 为什么要用数据透视表 如果不用&#xff0c;就可能需要写很复杂的&#xff0c;查询公式 比如&#xff0c;vlookup各种sumif,sumifs 等等&#xff0c;如果还是多个表进行统计&#xff0c;那写起来更酸爽所以感觉 vlookup sumif,sumifs 更适合&#xff0c;简单情况下的查询&am…...

C 文件读写

C 文件读写 本章我们将介绍 C 程序员如何创建、打开、关闭文本文件或二进制文件。 一个文件&#xff0c;无论它是文本文件还是二进制文件&#xff0c;都是代表了一系列的字节。C 语言不仅提供了访问顶层的函数&#xff0c;也提供了底层&#xff08;OS&#xff09;调用来处理存…...

Linux中实现程序开机自启——将程序配置为系统服务

一、需求说明 当我们在Linux系统上安装软件时,希望软件实现开机自启,或程序崩溃后自动重启,提升软件运行的稳定性;而linux系统中的systemd刚好可以满足我们的要求(可将软件注册为系统服务)。 二、systemd systemd 是一个 Linux 系统基础组件的集合,提供了一个系统和服务…...

【洛谷刷题】蓝桥杯专题突破-广度优先搜索-bfs(13)

目录 写在前面&#xff1a; 题目&#xff1a;P1443 马的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述&#xff1a; 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 解题思路&#xff1a; 代码&#xff1a; AC &am…...

【新2023Q2模拟题JAVA】华为OD机试 - 总最快检测效率 or 核酸检测效率

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:报数 题目 一百个人围成一圈…...

基于主成分分析的混音方法

一、简介&#xff1a; 基于主成分分析的混音方法是一种常见的音频混音技术&#xff0c;它利用主成分分析&#xff08;PCA&#xff09;对音频信号进行降维和重构&#xff0c;从而实现混音。 二、基本步骤如下&#xff1a; 采集和存储需要混音的音频信号。 对音频信号进行主成分…...

Code Two Exchange Crack

CodeTwo Exchange 迁移允许直接从早期版本的 Exchange&#xff08;从 Exchange 2010 开始&#xff09;安全、轻松地迁移到 Exchange 2019 和 2016。此服务器应用程序还允许您集中管理来自 Microsoft 365 (Office 365) 的邮箱迁移以及来自基于 IMAP 的电子邮件系统&#xff08;例…...

jQuery.form.js 详细用法_维护老项目使用

概述 jquery-3.3.1.min.js &#xff1a; http://jquery.com/download jquery.form.min.js &#xff1a;http://malsup.com/jquery/form/#tab7 jquery form 是一个表单异步提交的插件&#xff0c;可以很容易提交表单&#xff0c;设置表单提交的参数&#xff0c;并在表单提交前…...

【Java】关于你不知道的Java大整数运算之BigInteger类超级好用!!!

目录 一、BigInteger类简单介绍 二、BigInteger构造方式 &#xff08;1&#xff09;构造方式 &#xff08;2&#xff09;输入方式 三、BigInteger常见的成员方法 &#xff08;1&#xff09;方法介绍 &#xff08;2&#xff09;方法使用演示 1.加减乘除余 2.比较 3.绝…...

运维是不是没有出路了?

瑞典马工的​​《是时候让运维集体下岗了》一出&#xff0c;就让运维人为之一颤&#xff0c;​人人自危。文章开篇就提到&#xff1a;​​明人不说暗话&#xff0c;在云原生和DevOps成熟的今天&#xff0c;运维作为一个岗位和团队已经完成了历史任务&#xff0c;应该退出舞台了…...

【C++笔试强训】第七天

选择题 解析&#xff1a;内联函数&#xff08;inline&#xff09;一般用于代码较少&#xff0c;代码块里面没有递归且频繁调用的函数&#xff0c;是一种以空间换时间&#xff08;不是指内存&#xff0c;而是指令变多编译出来的可执行程序会变大&#xff09;的做法。内联函数在预…...

mysql binlog 一直追加写,磁盘满了怎么办?

文章目录 mysql binlog 清理策略1、设置binlog最大的文件数和文件大小2、定时清理过期binlog文件3、手动清理binlog文件4、禁用或启用binlogmysql binlog用于记录mysql数据库所有变更(数据库的DDL、DML操作)包括用户执行的语句,以及底层引擎所执行的操作的二进制日志,主要用…...

缓存穿透、缓存雪崩、缓存击穿解决方案

什么是缓存 缓存就是数据交换的缓冲区&#xff08;称作Cache&#xff09;,是存贮数据的临时地方&#xff0c;一般读写性能较高。 添加 redis 缓存 给店铺类型查询业务添加缓存 需求&#xff1a;添加ShopTypeController中的queryTypeList方法&#xff0c;添加查询缓存 缓存更新…...

web + servlet + jdbc mysql 实现简单的表单管理界面

目录数据库创建数据库连接servlet创建,这里注意一下我的数据库我自己改了一下名字lhx网页html运行文件目录展示首先我们准备好开发使用的工具以及配置 idea2020 tomcat8.5 创建javaweb参考idea编译Tomcat详细步骤 IDEA通过JDBC连接数据库请参考jdbc连接数据库 需要登陆注册界面…...

Maven 国内镜像仓库

镜像仓库目标 当我们未定义任何远程仓库时&#xff0c;使用 Maven 更新依赖时&#xff0c;其会去默认远程仓库中拉取&#xff0c;默认远程仓库 是国外地址&#xff0c;所以在国内访问特别慢&#xff0c;想提升访问速度&#xff0c;需要将国外地址换成国内地址 更换仓库地址的…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

WebRTC从入门到实践 - 零基础教程

WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC&#xff1f; WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个支持网页浏览器进行实时语音…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!

本文介绍了一种名为AnomalyAny的创新框架&#xff0c;该方法利用Stable Diffusion的强大生成能力&#xff0c;仅需单个正常样本和文本描述&#xff0c;即可生成逼真且多样化的异常样本&#xff0c;有效解决了视觉异常检测中异常样本稀缺的难题&#xff0c;为工业质检、医疗影像…...