【Linux】多进程基础--信号

文章目录

    • 信号
      • 常见信号
      • 信号定时函数

信号

  • 发生事件时通过信号向进程进行通知,在软件层次上模拟中断,也叫软件中断,处理优先级较高
  • 对于前台进程可以通过特殊的字符发送信号,例如Ctrl+C即给当前进程发送一个SIGINT中断信号。
  • kill命令也是向进程发送信号,可以通过kill -l查询信号,例如kill -9 pid即向pid进程发送终止信号
  • 信号通信较为简单、不能携带大量的信息、优先级较高
  • 信号的默认处理动作为:Term终止进程、lgn忽略信号、Core终止进程并生成Core文件默认大小为0,可以通过ulimit -a查看,并通过ulimit -c unlimited进行大小修改即可看到相应文件,一般和gdb配合使用在gdb中可以通过core-file core查看文件、Stop暂定进程、Cont继续执行被暂停的进程,man 7 signal可查询详细信息

常见信号

信号代号信号名称说 明默认动作
1SIGHUP该信号让进程立即关闭,然后重新读取配置文件之后重启终止进程
2SIGINT程序中止信号,用于中止前台进程。相当于输出 Ctrl+C 快捷键终止进程
3SIGQUIT和SIGINT类似, 但由QUIT字符(通常是Ctrl+/)来控制。 进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号。终止进程
8SIGFPE在发生致命的算术运算错误时发出。不仅包括浮点运算错误,还包括溢出及除数为 0 等其他所有的算术运算错误终止进程、产生core文件
9SIGKILL用来立即结束程序的运行。本信号不能被阻塞、处理和忽略。般用于强制中止进程终止进程–强制
11SIGSEGV试图访问未分配给自己的内存, 或试图往没有写权限的内存地址写数据,段错误终止进程产生core文件
13SIGPIPE管道破裂。这个信号通常在进程间通信产生,比如采用FIFO(管道)通信的两个进程,读管道没打开或者意外终止就往管道写,写进程会收到SIGPIPE信号。终止进程
14SIGALRM时钟定时信号,计算的是实际的时间或时钟时间。alarm 函数使用该信号终止进程
15SIGTERM正常结束进程的信号,kill 命令的默认信号。如果进程已经发生了问题,那么这个信号是无法正常中止进程的,这时我们才会尝试 SIGKILL 信号,也就是信号 9终止进程
17SIGCHLD子进程结束时, 父进程会收到这个信号。忽略信号
18SIGCONT该信号可以让暂停的进程恢复执行。本信号不能被阻断继续/忽略
19SIGSTOP该信号可以暂停前台进程,相当于输入 Ctrl+Z 快捷键。本信号不能被阻断终止进程

信号定时函数

unsigned int alarm(unsigned int seconds);
//alarm不阻塞,程序正常执行,在指定的时间后向进程发送一个信号,通常是SIGALRM信号。
//参数seconds:指定多少秒后发送SIGALRM信号给调用进程。如果seconds为0,则取消任何现有的闹钟(如果有的话)。
//返回值:如果之前已有闹钟设置,该函数返回剩余的秒数并从新设置的秒数计时,如果没有设置过闹钟,返回0。
//SIGALRM:默认终止当前进程int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);
//成功时返回0,出错时返回-1,并设置errno
//周期性定时可代替alarm
//which:指定要设置的计时器类型,一般为ITIMER_REAL真实时间返回SIGALRM
//value:指向一个itimerval结构的指针
struct itimerval {struct timeval it_interval; /* 下一次间隔 */struct timeval it_value;   /* 多长时间开始计时 */
};
struct timeval{time_t tv_sec;//秒数suseconds_t tv_usec;//微秒
}
ovalue(可选):指向一个itimerval结构的指针,用来存储之前设置的定时器值。如果不需要旧值,可以传入NULL。struct itimerval new_value;
//设置间隔
new_value.it_interval.tv_sec=2;
new_value.it_interval.tv_usec=0;//设置延迟
new_value.it_value.tv_sec=3;
new_value.it_value.tv_usec=0;//使用if (setitimer(ITIMER_REAL, &new_value, NULL) == -1) {perror("setitimer error");return 1;}

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

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

相关文章

【数据结构】二叉树-堆

目录 一.树概念及性质 二.二叉树的概念与实现 三.堆的概念和结构 四.堆的实现 1.向下调整算法 2. 堆的创建 3.向上调整算法 4.堆的删除 五.堆排序 六.堆-源码 一.树概念及性质 树是一种非线性的数据结构,它是由数个节点组成的具有层次关系的集合。之所以叫…

干货 | SDR RFSoC技术框图大放送(附资源)

软件无线电(SDR) 本文参考《Software Defined Radio with Zynq UltraScale RFSoc》,全文共744页。需要的可以给公众号 迪普微科技 发送“SDR”。

【力扣】矩阵中的最长递增路径

一、题目描述 二、解题思路 1、先求出以矩阵中的每个单元格为起点的最长递增路径 题目中说,对于每个单元格,你可以往上,下,左,右四个方向移动。那么以一个单元格为起点的最长递增路径就是:从该单元格往上…

基于曲率的关键点检测

曲率是描述点云中每个点局部几何形状的一种度量。高曲率的点通常位于边缘、角点等显著位置。因此,通过检测曲率较高的点,我们可以找到点云中的关键点。 函数实现 下面是一个用于基于曲率检测关键点的函数实现 计算平均曲率 //计算平均曲率 float com_avg_curvature(pcl::P…

SpringBoot项目启动后访问网页显示“Please sign in“

SpringBoot启动类代码如下 SpringBoot项目启动后访问网页显示"Please sign in",如图 这是一个安全拦截页面,即SpringSecurity认证授权页面,因为SecurityAutoConfiguration是Spring Boot提供的安全自动配置类,也就是说它…

城规跨考地信:你需要知道的几件事

24考研结束,25地信考研的小伙伴也开始准备。 在这期间发现一个现象,城规跨考GIS的讨论度非常高。 对这一点,我并不感到意外,因为随着地产行业的节节败退,很多单位不需要那么多规划人和建筑人,乃至土木人。…

SpringCloud 微服务中网关如何记录请求响应日志?

在基于SpringCloud开发的微服务中,我们一般会选择在网关层记录请求和响应日志,并将其收集到ELK中用作查询和分析。 今天我们就来看看如何实现此功能。 日志实体类 首先我们在网关中定义一个日志实体,用于组装日志对象 Data public class …

使用Java apache commons包五分钟搞定NCR解析(内附源码)

在网上看到很多关于解析NCR(Numeric Character Reference)字符串的java实现,核心都是通过自定义正则表达式来解析,其实org.apache.commons 已经为我们提供了jar包 解决该问题,非常的方便!在这里我就来简单分享一下具体实现方法&am…

这就是英伟达 CEO 黄仁勋所说的人工智能“下一波浪潮”|TodayAI

在台湾一年一度的科技展 COMPUTEX 开幕前的周日,英伟达(Nvidia)首席执行官黄仁勋(Jensen Huang)表示,机器人和“理解物理定律的 AI”将成为下一波技术浪潮。他指出,英伟达目前正在推动生成式人工…

MyBatis核心对象

MyBatis核心类对象主要有俩个: 1:对相关配置文件信息进行封装的Configuration对象 2:用来执行数据库操作的Executor对象。 核心对象----存储类对象Configuration Configuration对象主要有三个作用: 1:封装MyBatis…

Pulsar 社区周报 | No.2024-05-30 | BIGO 百页小册《Apache Pulsar 调优指南》

“ 各位热爱 Pulsar 的小伙伴们,Pulsar 社区周报更新啦!这里将记录 Pulsar 社区每周的重要更新,每周发布。 ” BIGO 百页小册《Apache Pulsar 调优指南》 Hi,Apache Pulsar 社区的小伙伴们,社区 2024 上半年度的有奖问…

Python input 语法:深入解析与高效运用

Python input 语法:深入解析与高效运用 Python中的input函数是获取用户输入的关键工具,其语法简洁却功能强大。然而,对于初学者来说,input的语法及其背后的机制可能会显得有些复杂和困惑。本文将从四个方面、五个方面、六个方面和…

【java11】java11新特性介绍

Java11于2018年9月25日正式发布,Java11是继Java8之后的第一个LTS(Long-Term-Support)长期支持功能版本,与之前的版本(Java9和Java10)不同,它提供了长达3年的维护期,旨在提供稳定且长…

AIGC和ChatGPT有什么区别?

AIGC和ChatGPT有什么区别? 首先先解释一下它们各自的概念 什么是AIGC AIGC,全称为Artificial Intelligence Generated Content,中文译为人工智能生成内容。这是一种利用人工智能技术自动生成内容的生产方式。例如,它可以创作出各种形式的内…

基于PHP+MySQL组合开发的同城便民小程序源码系统 房产出租+求职招聘+相亲交友 带完整的安装代码包以及搭建教程

系统概述 在当今信息化高速发展的时代,同城便民小程序已成为城市居民日常生活中不可或缺的一部分。为了满足广大用户的需求,小编给大家分享一款基于PHPMySQL组合开发的同城便民小程序源码系统。该系统集房产出租、求职招聘、相亲交友等多功能于一体&…

【JS】JavaScript编程语言-数据类型 日期和时间(2024-06-04)

内建对象:日期(Date)。该对象存储日期和时间,并提供了日期/时间的管理方法。 我们可以使用它来存储创建/修改时间,测量时间,或者仅用来打印当前时间。 1、创建 调用 new Date() 来创建一个新的 Date 对象…

微信小程序使用echarts

思路 五个tab公用一个柱状图组件切换tab以及切换时间改变数据,传入子组件,子组件监听数据重新更新点击柱状图显示具体数值每个时间点有两个柱子(高压和低压),柱状图显示高压的最大值到最小值的范围除了血压其余只有一…

Python采集数据处理:利用Pandas进行组排序和筛选

概述 在现代数据处理和分析中,网络爬虫技术变得越来越重要。通过网络爬虫,我们可以自动化地从网页上收集大量的数据。然而,如何高效地处理和筛选这些数据是一个关键问题。本文将介绍如何使用Python的Pandas库对采集到的数据进行组排序和筛选…

NotImplementedError: cannot instantiate ‘PosixPath‘ on your system报错解决

问题描述 NotImplementedError: cannot instantiate PosixPath on your systemThe above exception was the direct cause of the following exception: 解决 在代码的最前面加上 import pathlib temp pathlib.PosixPath pathlib.PosixPath pathlib.WindowsPath 如果是Lin…

基于SpringBoot+Vue研究生志愿填报辅助系统设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝1W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,还…