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

若依项目部署(Linux2.0)
解压jdk tar -zxvf jdk-8u151-linux-x64.tar.gz 配置Java环境变量: vim /etc/profile 设置环境变量生效: source /etc/profile 查看一下jdk版本: java -version 解压tomcat tar -zxvf apache-tomcat-8.5.20.tar.gz 防火墙设置: …...

python小练习03
1.绘制奥运五环旗 #奥运五环的绘制 import turtle as t t.pensize(3) t.speed(0) def draw_circles():i0while i <4:args [[-60,0,"blue"],[0,0,"black"],[60,0,"red"],[-30,-30,"yellow"],[30,-30,"green"]]#定义一个…...

【机器学习】机器学习在深度学习领域中的作用:半监督学习的视角
👀时空之门👀 🔍引言🎈半监督学习概述🚝机器学习在深度学习领域中的作用☘特征提取与表示学习🍀复杂任务建模❀结合半监督学习提升性能 🚀半监督学习在深度学习中的应用场景📕图像识…...

C#WPF数字大屏项目实战01--开发环境与项目创建
1、学习目标 -界面布局 ,- 模板调整,- 控件封装,- 图表,- 通信对接,- 动态更新 2、开发环境 开发工具:Visual Studio-2022-17.8.6-Community 运行时框架:.Net 6或Framework 4.5以上 UI框…...

python中字符串的各类方法
大小写转换方法 upper() 用于将字符串中的小写字母转为大写字母。 abcd.upper() # ABCD aBcD.upper() # ABCD lower() 用于将字符串中的大写字母转为小写字母。 ABCD.lower() # abcd aBcD.lower() # abcd capitalize() 用于将字符串的第一个字母变成大写࿰…...

DataGrip 数据库连接客户端
I DataGrip 安装 1.1安装 打开dmg镜像,将“DataGrip.app”拖入应用程序中; 1.2 Act 打开应用程序,点击试用模式启动软件,然后将“jetbrains-agent-latest”拖到任意位置,然后拖入,弹出对话框,点击“Rest…...
JS片段:生成 UUID
Hi,这里是松桑,每天学习一个 JS 片段,涨涨🧀!今天带来的是如何生成 UUID,UUID作为全局唯一标识,使用常见广泛,包括分布式系统、数据库主键、会话标识、消息队列、日志追踪等等。 什么…...

小学数学出题器-Word插件-大珩助手
Word大珩助手是一款功能丰富的Office Word插件,旨在提高用户在处理文档时的效率。它具有多种实用的功能,能够帮助用户轻松修改、优化和管理Word文件,从而打造出专业而精美的文档。 【新功能】小学数学出题器 1、实现了难度设定;…...

短剧平台源码:打造个性化娱乐体验的核心功能
在数字化媒体的浪潮中,短剧平台源码扮演着至关重要的角色,它不仅是构建短剧平台的技术基础,更是提供个性化娱乐体验的关键。本文将深入探讨短剧平台源码的核心功能,包括推荐短剧、本周热门/热播、个性化推荐、追剧功能、观看历史、…...

【MySQL】MySQL 图形化界面 - 使用说明(MySQL Workbench)
一、安装软件 Navicat,SQLyog 这些软件都不错,不过都需要收费,当然也有破解版。下面用 MySQL Workbench,它是官方提供的工具。 二、使用操作 这个软件本质是一个客户端,现在要让数据库能够远程登录。不过一般不会远程…...
Shell 编程之免交互
一、Here Document 语法格式: 命令 << 标记 ...... ...... 标记 1.用wc -l的命令统计输入的文字的行数 [rootlocalhost ~]# wc -l <<EOF > aaa > bbb > ccc > EOF 3 备注: 显示行数。 2.整体赋值给变量,通过ech…...

github有趣项目:Verilog在线仿真( DigitalJS+edaplayground)
DigitalJS https://github.com/tilk/digitaljs这个项目是一个用Javascript实现的数字电路模拟器。 它旨在模拟由硬件设计工具合成的电路 像 Yosys(这里是 Github 存储库),它有一个配套项目 yosys2digitaljs,它可以转换 Yosys 将文…...

性能测试学习-基本使用-元件组件介绍(二)
jmeter优点是:开源免费,小巧,丰富的学习资料和扩展组件 缺点是:1.不支持IP欺骗,分析和报表能力相对于LR欠缺精确度(以分钟为单位) 工具用户量分析报表IP欺骗费用体积扩展性Loadrunner多(万)精…...

基于大模型的智慧零售教育科研平台——技术方案
一、概述 1.1背景 随着数字经济的快速发展和全社会数字化水平的升级,人工智能的积极作用越来越凸显,人工智能与各个行业的深度融合已成为促进传统产业转型升级的重要方式之一。ChatGPT的出现掀起了又一波人工智能发展热潮,人工智能行业发展势…...
C# using的几个用途
using 关键字有三个主要用途: 1.using 语句定义一个范围,在此范围的末尾将释放对象: string filePath "example.txt"; string textToWrite "Hello, this is a test message!"; // Use the using statement to ensure …...

MyBatis3.4全集笔记
MyBatis 1. MyBatis 简介 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。 iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Ja…...

IDEA一键启动多个微服务
我们在做微服务项目开发的时候,每次刚打开IDEA,就需要把各个服务一个个依次启动,特别是服务比较多时,逐个点击不仅麻烦还费时。下面来说一下如何一键启动多个微服务。 操作步骤 点击Edit Configurations 2.点击“”,…...
【Python3】random.choices 权重随机选取 详解
random.choices是Python 3中random模块中的一个函数,用于从指定的序列中以指定的权重随机选择元素。下面我将对该函数进行详细介绍,并提供一些示例代码和注意事项。 函数签名: random.choices(population, weightsNone, *, cum_weightsNone…...
【面试题-015】Redis的线程模型是什么 为什么速度快
redis面试题 Redis的线程模型是什么 为什么速度快? Redis是一个开源的、高性能的键值对(key-value)数据库。它之所以速度快,主要得益于以下几个方面的设计: 单线程模型: Redis的操作是单线程的ÿ…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...

Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...

基于单片机的宠物屋智能系统设计与实现(论文+源码)
本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢,连接红外测温传感器,可实时精准捕捉宠物体温变化,以便及时发现健康异常;水位检测传感器时刻监测饮用水余量,防止宠物…...

【版本控制】GitHub Desktop 入门教程与开源协作全流程解析
目录 0 引言1 GitHub Desktop 入门教程1.1 安装与基础配置1.2 核心功能使用指南仓库管理日常开发流程分支管理 2 GitHub 开源协作流程详解2.1 Fork & Pull Request 模型2.2 完整协作流程步骤步骤 1: Fork(创建个人副本)步骤 2: Clone(克隆…...