Linux的学习之路:19、进程信号(1)

news2025/1/12 8:39:19

摘要

今天这张说一下信号的一部分知识

目录

摘要

一、信号

1、生活角度的信号

2、技术应用角度的信号

3、注意

4、用kill -l命令可以察看系统定义的信号列表

5、信号处理常见方式概览

二、产生信号

1、通过终端按键产生信号

2、调用系统函数向进程发信号

3、由软件条件产生信号

4、硬件异常产生信号


一、信号

1、生活角度的信号

从生活的角度来理解信号,我们可以将其视为日常生活中无处不在的提示、指引和信息传递。这些信号可能来自他人、环境、自身感受,甚至是科技设备,它们以不同的方式影响着我们的决策、行为和感受。

在日常生活中,我们不断地接收和解读来自他人的信号。这些信号可能是言语上的,比如朋友的一句问候或家人的关心;也可能是非言语的,比如一个眼神、一个手势或一个微笑。这些信号帮助我们理解他人的情感、需求和意图,从而建立和维护人际关系。

同时,环境也在向我们发送信号。比如,早晨的阳光透过窗户,告诉我们新的一天开始了;傍晚的微风和落日,则预示着一天的结束。季节的变化、天气的转换、自然界的声响和色彩,都在向我们传递着关于环境的信息,帮助我们适应并与之和谐相处。

此外,我们自己的身体也在向我们发送信号。这些信号可能是生理上的,比如饥饿感或疲劳感,提醒我们需要进食或休息;也可能是心理上的,比如焦虑或喜悦的情绪,反映着我们内心的状态。通过关注和理解这些身体信号,我们可以更好地照顾自己,保持身心健康。

最后,现代科技设备也在不断地向我们发送信号。手机的震动、电脑的提示音、智能手表的提醒等,都在告诉我们有新的信息或任务需要处理。这些科技信号使我们的生活更加便捷和高效,但同时也需要我们保持一定的警觉和判断力,以免被过多的信息干扰。

综上所述,从生活的角度来理解信号,就是要学会观察和解读来自不同来源的信息和提示。通过关注和理解这些信号,我们可以更好地与他人交往、适应环境、照顾自己,以及利用科技设备提升生活质量。

2、技术应用角度的信号

用户输入命令,在Shell下启动一个前台进程。用户按下Ctrl+C ,这个键盘输入产生一个硬件中断,被OS获取,解释成信号,发送给目标前台进程,前台进程因为收到信号,进而引起进程退出。

我们这里就是创建了一个文件一直输出hello,然后用ctr+c停止,如下图所示

3、注意

这里有三点需要注意

1、Ctrl-C 产生的信号只能发给前台进程。一个命令后面加个&可以放到后台运行,这样Shell不必等待进程结束就可以接受新的命令,启动新的进程。
2、Shell可以同时运行一个前台进程和任意多个后台进程,只有前台进程才能接到像 Ctrl-C 这种控制键产生的信号。
3、前台进程在运行过程中用户随时可能按下 Ctrl-C 而产生一个信号,也就是说该进程的用户空间代码执行到任何地方都有可能收到 SIGINT 信号而终止,所以信号相对于进程的控制流程来说是异步(Asynchronous)的。

信号是进程之间事件异步通知的一种方式,属于软中断

4、用kill -l命令可以察看系统定义的信号列表

如下图所示每个信号都有一个编号和一个宏定义名称,这些宏定义可以在signal.h中找到,例如其中有定 义 #define SIGINT 2编号34以上的是实时信号,本章只讨论编号34以下的信号,不讨论实时信号。这些信号各自在什么条件下产生,默认的处理动作是什么,在signal(7)中都有详细说明: man 7 signal

5、信号处理常见方式概览

有下方三个方式

1、忽略此信号。
2、执行该信号的默认处理动作。
3、提供一个信号处理函数,要求内核在处理该信号时切换到用户态执行这个处理函数,这种方式称为捕捉(Catch)一个信号。

二、产生信号

1、通过终端按键产生信号

SIGINT的默认处理动作是终止进程,SIGQUIT的默认处理动作是终止进程并且Core Dump,现在我们来验证一下。
Core Dump
首先解释什么是Core Dump。当一个进程要异常终止时,可以选择把进程的用户空间内存数据全部 保存到磁盘上,文件名通常是core,这叫做Core Dump。进程异常终止通常是因为有Bug,比如非法内存访问导致段错误,事后可以用调试器检查core文件以查清错误原因,这叫做Post-mortem Debug(事后调试)。一个进程允许产生多大的core文件取决于进程的Resource Limit(这个信息保存 在PCB中)。默认是不允许产生core文件的,因为core文件中可能包含用户密码等敏感信息,不安全。在开发调试阶段可以用ulimit命令改变这个限制,允许产生core文件。 首先用ulimit命令改变Shell进程的Resource Limit,允许core文件最大为1024K: $ ulimit -c 1024

那么什么是Linux信号?

本质是一种通知机制,用户或者操作系统通过发送一定的信号,通知进程,某些时间已经发生,你可以在后续处理

2、调用系统函数向进程发信号

17905是test进程的id。之所以要再次回车才显示 Segmentation fault ,是因为在4568进程终止掉 之前已经回到了Shell提示符等待用户输入下一条命令,Shell不希望Segmentation fault信息和用 户的输入交错在一起,所以等用户输入命令之后才显示。

指定发送某种信号的kill命令可以有多种写法,上面的命令还可以写成 kill -SIGSEGV 4568 或 kill -11,17905, 11是信号SIGSEGV的编号。以往遇 到的段错误都是由非法内存访问产生的,而这个程序本身没错,给它发SIGSEGV也能产生段错误。

kill命令是调用kill函数实现的。kill函数可以给一个指定的进程发送指定的信号。raise函数可以给当前进程发送指定的信号(自己给自己发信号) 

#include <signal.h>
int kill(pid_t pid, int signo);
int raise(int signo);
这两个函数都是成功返回0,错误返回-1。

abort函数使当前进程接收到信号而异常终止

#include <stdlib.h>
void abort(void);
就像exit函数一样,abort函数总是会成功的,所以没有返回值。 

3、由软件条件产生信号

SIGPIPE是一种由软件条件产生的信号,在“管道”中已经介绍过了。本节主要介绍alarm函数 和SIGALRM信号。

#include <unistd.h>
unsigned int alarm(unsigned int seconds);
调用alarm函数可以设定一个闹钟,也就是告诉内核在seconds秒之后给当前进程发SIGALRM信号, 该信号的默认处理动
作是终止当前进程

4、硬件异常产生信号

硬件异常被硬件以某种方式被硬件检测到并通知内核,然后内核向当前进程发送适当的信号。例如当前进程执行了除以0的指令,CPU的运算单元会产生异常,内核将这个异常解释 为SIGFPE信号发送给进程。再比如当前进程访问了非法内存地址,,MMU会产生异常,内核将这个异常解释为SIGSEGV信号发送给进程。

所以如何理解组合键变成信号呢/

键盘工作方式是通过中断方式进行的,当然也能够识别组合键ctrl+c,os解释组合键->查找进程列别->前台运行的进程->os写入对饮的信号到进程内部的

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

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

相关文章

Fisher判别:理解数据分类的经典方法

在机器学习和统计分类的领域中&#xff0c;Fisher判别&#xff08;也称为Fisher线性判别分析&#xff09;是一种非常重要的方法&#xff0c;旨在从数据中提取重要特征&#xff0c;以实现对样本的分类。即Fisher判别分析&#xff08;Fisher Discriminant Analysis, FDA&#xff…

Midjourney-01 初试上手 注册使用并生成你的第一张AI图片 详细流程 提示词 过程截图 生成结果 付费文生图的天花板!

背景介绍 Midjourney是一款基于人工智能技术的绘画软件&#xff0c;利用深度学习算法来辅助用户进行绘画创作。这款软件能够通过用户输入的文本描述生成图像&#xff0c;支持多种生成方式&#xff0c;包括文字生成图片、图片生成图片和混合图片生成图片。 图像生成方式&#…

STM32之HAL开发——FSMC控制带控制器LCD(8080时序)

STM32FSMC模拟8080接口时序 ILI9341的8080通讯接口时序可以由STM32使用普通I/O接口进行模拟&#xff0c;但这样效率太低&#xff0c;STM32提供了一种特别的控制方法——使用FSMC接口实现8080时序。 由于FSMC外设可以用于控制扩展的外部存储器&#xff0c;而MCU对液晶屏的操作实…

Jackson 2.x 系列【31】Spring Boot 集成之字典翻译

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Jackson 版本 2.17.0 本系列Spring Boot 版本 3.2.4 源码地址&#xff1a;https://gitee.com/pearl-organization/study-jaskson-demo 文章目录 1. 场景描述2. 案例演示2.1 修改枚举2.2 定义注解…

JVM垃圾收集器--分区收集器

G1收集器 G1&#xff08;Garbage-First Garbage Collector&#xff09;在 JDK 1.7 时引入&#xff0c;在 JDK 9 时取代 CMS 成为了默认的垃圾收集器。G1 有五个属性&#xff1a;分代、增量、并行、标记整理、STW。 分代 G1收集器 将内部分为多个大小相等的区域&#xff0c;另…

2024五一劳动节市集露营生活节活动策划方案

2024五一劳动节市集露营生活节&#xff08;向野而生 躺平生活节主题&#xff09;活动策划方案 方案页码&#xff1a;72页 文件格式&#xff1a;pptx 方案简介&#xff1a; 五一躺平生活节 咖啡一饮&#xff0c;书本一翻&#xff0c;轻松又自在,看着窗外的阳光&#xff0c;…

2024商业地产五一劳动节健康大会朋克养生市集活动策划方案

2024商业地产五一劳动节健康大会朋克养生市集&#xff08;带薪健康 快乐打工主题&#xff09;活动策划方案 活动策划信息&#xff1a; 方案页码&#xff1a;53页 文件格式&#xff1a;PPT 方案简介&#xff1a; 打工不养生 赚钱养医生 期待已久的五一假期&#xff0c; …

进口主食冻干高价是营销炒作还是物有所值?百利冻干真相揭秘分享

提及高端主食冻干&#xff0c;百利无疑也隶属其中。在各大平台上搜索“主食冻干”等相关词汇时&#xff0c;百利总能脱颖而出。在历次的双11、618等购物狂欢中&#xff0c;百利的销量都还不错。说明其高昂的价格也让许多宠物主人犹豫不决&#xff0c;只能等待大促时的优惠。那么…

【python】Python成语接龙游戏[1-3难度均有](源码+数据)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

好友关注-实现分页查询收邮箱

9.5好友关注-实现分页查询收邮箱 需求&#xff1a;在个人主页的“关注”卡片中&#xff0c;查询并展示推送的Blog信息&#xff1a; 具体操作如下&#xff1a; 1、每次查询完成后&#xff0c;我们要分析出查询出数据的最小时间戳&#xff0c;这个值会作为下一次查询的条件 2…

Midjourney是什么?Midjourney怎么用?怎么注册Midjourney账号?国内怎么使用Midjourney?多人合租Midjourney拼车

Midjourney是什么 OpenAI发布的ChatGPT4引领了聊天机器人的竞争浪潮&#xff0c;随后谷歌推出了自己的AI聊天机器人Bard&#xff0c;紧接着微软推出了Bing Chat&#xff0c;百度也推出了文心一言&#xff0c;这些聊天机器人的推出&#xff0c;标志着对话式AI技术已经达到了一个…

每日一题 —— 最大子数组之和(动态规划)

1.链接 53. 最大子数组和 - 力扣&#xff08;LeetCode&#xff09; 2.描述 3.思路 4.参考代码 class Solution { public:int maxSubArray(vector<int>& nums) {int n nums.size();vector<int> dp(n1,0);int ret INT_MIN;for(int i 1;i<n;i){dp[i] ma…

pytest教程-29-重复执行用例插件-pytest-repeat

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们学习了设置用例超时时间插件pytest-timeout&#xff0c;本小节我们讲解一下pytest重复执行用例插件pytest-repeat。 前言 做功能测试的时候&#xff0c;经常会遇到某个模块不稳定&#xff0c;偶然会…

STM32 I²C通信

一、IC总线通信 1.1 IC总线特点 IC&#xff08;Inter Integrated Circuit&#xff0c;集成电路总线&#xff09;&#xff0c;通过串行数据线SDA&#xff08;Serial Data&#xff09;和串行时钟线SCL&#xff08;Serial Clock&#xff09;来完成数据的传输。 特点&#xff1a;…

CentOS配置JDK8环境并安装配置neo4j

1. 工具安装 1. 安装wget yum install -y wget2. 安装vim yum install -y vim-enhanced2. 配置JDK 1. 安装JDK 先到官网下载jdk8的压缩包&#xff0c;点我传送&#xff0c;并将压缩包上传到虚拟机的/usr/local目录下。 cd /usr/local # 进入 /usr/local目录 tar -zxvf jdk-…

代码随想录算法训练营第20天 |654.最大二叉树、 617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树

代码随想录算法训练营第20天 |654.最大二叉树、 617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树 自己看到题目的第一想法看完代码随想录之后的想法自己实现过程中遇到哪些困难 链接: 654.最大二叉树 链接: 617.合并二叉树 链接: 700.二叉搜索树中的搜索 链接: 98.…

【MATLAB源码-第196期】基于matlab的A*融合DWA算法栅格路径规划仿真,画出路径图、姿态角度以及线角速度。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 A算法与DWA算法的融合是一个高效的路径规划策略&#xff0c;这种策略将A算法的全局路径规划能力与DWA算法的局部避障能力结合起来&#xff0c;以期达到更快、更安全的导航效果。以下是对这种融合策略的详细描述。 一、基本概…

达梦工具使用-DTS

文章目录 前言一、图形化界面的DTS1.从Oracle迁移到DM2.从DM迁移到Oracle3.同构DM数据库迁移 二、命令行方式的DTS总结 前言 DTS是达梦数据库自带的数据迁移工具&#xff0c;主要场景适用于同构数据库轻量数据级之间数据迁移&#xff0c;当数据量不大时&#xff0c;也可用于不…

解决“找不到MSVCP120.dll”或“MSVCP120.dll丢失”的错误方法

在计算机使用过程中&#xff0c;遇到诸如“找不到MSVCP120.dll”或“MSVCP120.dll丢失”的错误提示并不罕见。这类问题往往会导致某些应用程序无法正常运行&#xff0c;给用户带来困扰。本文旨在详细阐述MSVCP120.dll文件的重要性、其丢失的可能原因&#xff0c;以及解决方法&a…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之五 简单进行车牌检测和识别

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之五 简单进行车牌检测和识别 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之五 简单进行车牌检测和识别 一、简单介绍 二、简单进行车牌检测和识别实现原理 …