先过我这一关 - signal

先过我这一关 - signal

在运行程序的时候,一般都知道运行 Ctrl+C 八成就会把程序给中断,类似于应用程序里面的CLOSE ,但是如果有些数据在运行过程中没有保存,就会比较尴尬,此时就需要借助signal同学,让他对企图不小心中断程序时先去做一些操作,别直接退出,完成后再安全退出。

基本语法

//#include <signal.h>
//void (*signal(int sig, void (*func)(int)))(int);#include <signal.h>typedef void (*sighandler_t)(int);sighandler_t signal(int signum, sighandler_t handler);
  • signum 是需要处理的信号,比如 SIGINT(通常是Ctrl+C产生的中断信号)。
  • handler 是一个指向函数的指针,这个函数的任务是处理信号。这个处理函数需要一个整型参数(信号的编号),返回信号的句柄,或者在出错时返回SIG_ERR

当信号 signum 被捕获时,系统将调用 handler 指向的函数。如果 handerSIG_IGN,则信号将被忽略;如果是 SIG_DFL,则执行该信号的默认操作。

示例代码

下面是一个使用 signal 的示例,这段代码演示了如何捕获 SIGINT 信号,并定义一个简单的信号处理函数来处理用户的中断信号。

#include <stdio.h>
#include <signal.h>
#include <unistd.h>void handle_sigint(int sig) {printf("### \n");printf("### Oops! You hit Ctrl+C! But I will not quit cause I am rnning. Signal %d received.\n", sig);printf("### Save your work at first before close the application!!!\n");printf("### \n");
}int main() {signal(SIGINT, handle_sigint); while (1) {printf("Program running... \n");printf("Try press Ctrl+C to see can you stop me\n");sleep(1);  }return 0;
}

在这个程序中,signal 函数被用来设置 SIGINT(由 Ctrl+C 触发)的处理函数为 handle_sigint。这意味着当用户按下 Ctrl+C 时,不会像通常那样终止程序,而是调用 handle_sigint 函数。函数接收一个整型参数 signum,它是被捕获的信号的编号。

程序将进入一个无限循环,每秒输出 "Program running… "这个提示词,并通过 sleep(1) 暂停一秒。在这期间,如果程序接收到信号,将执行相应的处理函数。

注意

不过在多线程环境中使用 signal 可能会有问题,另外 signal 函数有可能会有可移植性问题,所以可以考虑使用 sigaction 来增加兼容性。

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

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

相关文章

Transformer详细介绍

目录 前言 一、背景 传统序列模型的问题 Transformer的动机 二、组成部分 自注意力机制&#xff08;Self-Attention&#xff09; 编码器和解码器 位置编码 前馈神经网络 三、训练和推理 训练过程 推理过程 四、应用 自然语言处理任务 图像处理和其他领域 BERT和…

吴恩达机器学习-实践实验室:协同过滤推荐系统(Collaborative Filtering Recommender Systems)

在本练习中&#xff0c;您将实现协作过滤&#xff0c;以构建电影推荐系统。 文章目录 1-概念2-推荐系统3-电影评分数据集4-协作过滤学习算法4.1协同过滤成本函数 5-学习电影推荐6-建议7-祝贺 软件包 我们将使用现在熟悉的NumPy和Tensorflow软件包。 import numpy as np import…

调用nltk分词库时出现nltk_data Error loading averaged_perceptron_tagger问题的解决办法

问题描述&#xff1a;运行时出现[nltk_data] Error loading averaged_perceptron_tagger&#xff0c;Name or service not known问题&#xff0c;详见下图。 由于这个问题最近总是困扰开发和调试工作&#xff0c;因此将彻底的解决办法记录如下&#xff0c;如下设置好就不需要漫…

【数据结构】07查找

查找 1. 基本概念2. 顺序表查找2.1 顺序查找2.2 顺序查找优化-哨兵 3. 有序表查找3.1 折半查找&#xff08;二分查找&#xff09; 4. 分块查找&#xff08;索引顺序查找&#xff09;5. Hash表&#xff08;散列表&#xff09;5.1 散列函数的设计5.2 代码实现5.2.1 初始化Hash表5…

netcat检测工具

1.下载&#xff1a; windows下载地址&#xff1a;netcat-windows linux下载地址&#xff1a;netcat-linux 2. 安装&#xff1a; windows&#xff1a;打开上方链接下载后解压至桌面即可 centos&#xff1a; ① 可以使用yum install nc -y安装 ② 也可以打开上方链接下载rpm包…

装修后快速入住指南,除甲醛的10个小妙招。福州中宅装饰,福州装修

装修后除甲醛的方法有很多种&#xff0c;以下是一些常见的方法&#xff1a; 1. 通风 通风是最基本的除甲醛方法之一&#xff0c;打开窗户让空气流通&#xff0c;可以将室内的甲醛排出。可以在早晨和晚上空气质量较好的时候进行通风。 2. 植物吸收 一些植物如吊兰、常春藤、虎…

李廉洋;4.13黄金,原油最新资讯,下周一盘走势分析及策略。

美国杜克大学大宗商品研究教授Harvey表示&#xff0c;目前除了避险情绪外&#xff0c;“上涨惯性”也是促使黄金“疯涨”的原因。他表示&#xff1a;“目前不断涌入黄金市场的资金实际上在增加风险敞口&#xff0c;除了散户&#xff0c;对冲基金和其他机构投资者也加入了黄金热…

MongoDB 按照某个字段分组,并按照分组的记录数降序排列

以下是一个示例查询&#xff1a; db.collection.aggregate([{$group: {_id: "$quoteId", // 按照quoteId字段进行分组count: { $sum: 1 } // 统计每个分组的记录数}},{$sort: {count: -1 // 按照记录数降序排序}} ]) 在这个查询中&#xff1a; $group阶段将文档按照q…

黑龙江等保测评Linux服务器的三种配置 IP方法

方法一&#xff1a;使用nmcli命令 说明&#xff1a; 使用nmcli命令配置的网络配置可以立即生效且系统重启后配置也不会丢失。 nmcli介绍 nmcli是NetworkManager的一个命令行工具&#xff0c;它提供了使用命令行配置由NetworkManager管理网络连接的方法。nmcli命令的基本格式为…

vue 百度地图 使用 vue-baidu-map 进行当前位置定位和范围展示

vue 百度地图 使用 vue-baidu-map 进行当前位置定位和范围展示&#xff08;考勤打卡&#xff09; 一、创建百度地图账号&#xff0c;获取秘钥二、 引入插件1、安装vue-baidu-map2、在main.js中引入 三、 简单使用 最近写项目的时候&#xff0c;做到了考勤打卡的模块内容&#x…

LeetCode 2923. 找到冠军 I——每日一题

上一篇博客&#xff1a;为什么忘记密码要重置密码而不是直接告诉你密码&#xff1f; 写在前面&#xff1a;大家好&#xff01;我是晴空๓。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正&#xff0c;感谢大家的不吝赐教。我的唯一博客更新地址是&#xff1a;htt…

pbootcms百度推广链接打不开显示404错误页面

PbootCMS官方在2023年4月21日的版本更新中&#xff08;对应V3.2.5版本&#xff09;&#xff0c;对URL参数添加了如下判断 if(stripos(URL,?) ! false && stripos(URL,/?tag) false && stripos(URL,/?page) false && stripos(URL,/?ext_) false…

蓝桥杯抱佛脚篇~

文章目录 基础语法输入输出集合(set&#xff09;排序 基础语法 输入输出 # 输入一个数 nint(input())# 输入两、三个数&#xff0c;例如&#xff1a;1 2 或者 1 2 3 x,y map(int,input().split())# 输入数组 # ——— 1 —— nums[int(i) for i in input().split()] print(n…

巨坑:ModuleNotFoundError: No module named ‘dateutil‘

ModuleNotFoundError: No module named ‘dateutil’ dateutil安裝失敗&#xff1a; (pythonThirteen) [xxhadoop103 bin]$ pip install dateutil ERROR: Could not find a version that satisfies the requirement dateutil (from versions: none) ERROR: No matching distr…

记一次http访问超时服务器端调试

问题&#xff1a;http访问服务器时没有返回&#xff0c;没有超时&#xff0c;一直在阻塞 处理过程&#xff1a;telnet端口能连上&#xff0c;服务端程序也不存在处理时间过长的情况。 说明tcp连接没问题。推测是客户端连接后再发起请求&#xff0c;服务端阻塞了。因为很多客户…

PrimeKG:为精准医学分析设计的多模态知识图谱

PrimeKG&#xff1a;为精准医学分析设计的多模态知识图谱 PrimeKG简介数据资源和覆盖范围构建方法和技术细节PrimeKG多模态知识图谱的概览构建PrimeKG的过程PrimeKG 数据 多模态特性和临床应用PrimeKG 设计逻辑 论文&#xff1a;https://www.nature.com/articles/s41597-023-01…

最齐全,最简单的免费SSL证书获取方法——实现HTTPS访问

一&#xff1a;阿里云 优势&#xff1a;大平台&#xff0c;在站长中知名度最高&#xff0c;提供20张免费单域名SSL证书 缺点&#xff1a;数量有限&#xff0c;并且只有单域名证书&#xff0c;通配符以及多域名没有免费版本。并且提供的单域名证书只有三个月的期限。 二&#…

symfony框架介绍

Symfony是一个功能强大的PHP框架,它提供了丰富的组件和工具来简化Web开发过程。以下是一些关于Symfony的主要特点: 可重用性: Symfony提供了一系列可重用的PHP组件,这些组件可以用于任何PHP应用程序中。灵活性: Symfony允许开发者根据项目需求灵活选择使用哪些组件,而不是强…

GPDB技术内幕 - SEMI JOIN浅析

GPDB技术内幕 - SEMI JOIN浅析 SEMI JOIN顾名思义&#xff0c;半连接&#xff0c;相对于join字段来说&#xff0c;针对外表的一行记录&#xff0c;内表只要有一条满足&#xff0c;就输出外表记录。注意&#xff0c;这里是仅输出外表记录。GPDB中有几种实现方式&#xff0c;本文…

编译 c++ 编译的艮,一个编译回合下来 的需要换电脑!

研究这些ui 组件。 这的单独给他准备一台电脑了。 不是cmake 版本对不对。就是qt 版本不对。或者vs 版本太低。 sdk 没有包&#xff0c;编译包&#xff0c;需要组件&#xff0c;组件需要 qt5.5 但是 安装6.5.3 一个回和下来&#xff0c; 电脑坏了。随后旧项目 不能编译了&…