信号的基本概念及产生

linux信号基本概念及如何产生信号 阅前须知本文的主要内容有:1.信号的基本概念(包括进程对信号的3种处理方式)2.特殊信号举例:写代码证明信号存在,并实现信号的简单捕捉3.如何产生一个信号(代码举例:mykill的实现)其中拓展知识有:1.前台进程与后台进程(代码举例)2.核心转储core dumped的概念及其在代码调试中的作用(代码举例)——>全篇阅读大概需要5分钟<——信号的基本概念首先,我们可以用kill -l命令查看系统中 阅读详情

一、信号的基本概念
一些小细节:
1、Ctrl-C产生的信号只能发给前台进程。一个命令后面加上一个&可以放到后台运行,这样shell不必等待进程结束就可以接受新的命令,启动新的进程。
2、shell可以运行一个前台程序和任意多个后台进程,只有前台进程才能接到想Ctrl -C这样控制键产生的信号。
3、前台进程在运行过程中用户随时可能按下Ctrl-C而产生一个信号,也就是说该进程的用户空间代码执行到任何地方都有可能收到SIGINT信号而终止,,所以信号相对于进程的控制流程来说是异步的。
我们可以使用kill -l命令可以观察看系统定义的信号列表
这里写图片描述
我们可以看到信号的编号是1~64,我们通常把1~31的信号称为普通信号,把32~64的信号称为实时信号。
信号常见的处理方式:
1、忽略此信号
2、执行该信号的默认处理动作
3、提供一个信号处理函数,要求内核在处理该信号时切换到用户态执行这个处理函数,这种方式称为捕捉(Catch)一个信号。

二、信号产生的方式:

1、通过键盘按键产生
用户在终端下按下某些键时,终端驱动程序会发送信号给前台进程,例如Ctrl-C产生SININT信号,Ctrl-\产生SIGQUIT信号,Ctrl-Z产生SIGTSTP信号;
2、调用系统函数向进程发信号
硬件异常产生信号,这些条件由硬件检测到并通知内核,然后内核向当前进程发送适当的信号,例如当前进程执行了除以0的指令,CPU的运算单元会产生异常,内核将这个异常解释为SIGFPE信号发送给进程,再比如当前进程访问了非法的内存地址,MMU会产生异常,内核将这个异常解释为SIGSEGV信号发送给进程。
例如:我们在执行死循环时:
这里写图片描述

  • 3179是a.out进程的id,之所以出现这种现象:
  • 这里写图片描述
    是因为3179进程终止掉之前已经回到了shell提示符等待用户输入下一条命令,shell不希望segmentation fault信息和用户的输入交错在一起,所以等用户输入命令之后才显示。
  • 我们可以写成kill - SIGSEGV 3179或者写成kill -11 3279,其中11是信号的编号,我们一般知道这个段错误是非法内存访问产生的。而这个程序本身没有错,将它发SIGSEGV也能产生段错误。

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

这里写图片描述
这里写图片描述

这两个函数都成功返回0,错误返回-1

kill函数的实现

 1 #include <stdio.h>
  2 #include <signal.h>
  3 
  4 int main(int argc,char *argv[])
  5 {
  6     if(argc !=3){                                                                                                                                         
  7         printf("usage: %s signo proc_id\n",argv[0]);
  8         return 1;
  9         }
 10 
 11     kill(atoi(argv[2]),atoi(argv[1]));//argv[1]为pid
 12 }
 13 
~                          

代码实现的结果:我们看到我们自己写的kill命令可以杀死进程。
这里写图片描述
abort函数使当前进程接收到信号而异常终止
这里写图片描述

像exit函数一样,abort函数总是会执行成功的,所以没有返回值。abort()函数会导致进程的异常终止除非SIGABRT信号被捕捉并且信号处理句柄没有返回。

下面我们来看一段代码:

 1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 int main()
  5 {
  6     int i=0;
  7     for(;i<100;i++){
  8         printf("%d\n",i);
  9         if(i==5)
 10 
 11             abort();
 12     }                                                                                                                                                     
 13         return 0;
 14     }
 15 
~                    

执行结果为
这里写图片描述
我们可以看到程序执行结束之后,遇到abort函数就异常终止了。abort()函数会导致进程的异常终止除非SIGABRT信号被捕捉并且信号处理句柄没有返回。
3、由软件条件产生的信号
SIGPIPE是一种由软件产生的信号,在“管道”中已经介绍过了,这次就认识alarm函数,和SIGALRM信号。
这里写图片描述

调用alarm函数可以设定一个闹钟,也就是告诉内核在seconds秒之后给当前进程发SIGALRM信号,该信号的默认处理动作是终止当前进程。
这个函数的给返回值时0或者是以前设定闹钟时间余下的秒数,打个比方来说,某人要小睡一觉,设定闹钟为30分钟之后响铃,20分钟后被人吵醒了一次,还想多睡一会,于是重新设定闹钟的值为15分钟之后响铃,以前设定的闹钟余下的时间还有10分钟,如果seconds值为0,表示取消以前设定的闹钟的值,函数返回值仍然是以前设定闹钟时间还余下的秒数(自己验证一下?)

 1 #include <stdio.h>
  2 #include <unistd.h>
  3 
  4 int main()
  5 {
  6     int count=14;
  7     alarm(1);
  8     for(;1;count++)
  9     {
 10         printf("count=%d\n",count);
 11     }
 12     return 0;
 13 }                                                                                                                                     

这里写图片描述


1 #include <stdio.h>                                                                                                                    
  2 #include <unistd.h>
  3 
  4 
  5 int count=0;
  6 void handler(int signo)
  7 {
  8     printf("get a signo: %d,count is: %d\n",signo,count);
  9     exit(1);
 10 }
 11 
 12 int main()
 13 {
 14     signal(14,handler);
 15     alarm(1);
 16     while(、1)
 17     {
 18         count++;
 19    // printf("haha: %d\n",count++);printf往显示器输出,是外设,访问外设是I/O计算功能受到拖累,当printf去掉后,发现执行计数的功能速度加强。
 20     }
 21     return 0;
 22 }

这里写图片描述
最后我们也验证了CPU的计数速度远远大于外设的执行速度。

关于使用CMT2300A FIFO缓存区间设置为64Byte的问题 帮助你解决在使用CMT2300A 时遇到的各种问题,若有需要,请及时与我交流 阅读详情

相关推荐

信号的产生,处理,终止

一,信号的产生 信号的产生有三种方式:                                        硬件产生:CTRL + C,CPU,MMU报错等,发出的信号                                         软件产生:进程读写文件时发生错误,如另一个进程关掉了文件描述符,alarm信号等                          ...

congjichukaishi的博客 1462

国产PLC实战:用汇川Easy320搞定TCP通信,手把手教你网口转串口控制设备

本文详细解析了如何使用汇川Easy320 PLC实现TCP通信与串口控制,解决工业自动化中设备间通信协议差异问题。通过实战案例和代码示例,展示了Easy320在协议转换、数据解析和串口转发中的高效应用,帮助工程师快速掌握网口转串口控制技术。

weixin_31774841的博客 500

信号的基本概念、信号的产生以及阻塞信号

一、信号的基本概念 1.引入 计算机中常见的信号:(1) ⽤户输⼊命令,在Shell下启动⼀个前台进程; (2)⽤户按下Ctrl-C/Ctrl-Z等,这个键盘输⼊产⽣⼀个硬件中断。如此类的组合键等被操作系统解释为信号(注意,Ctrl-C产⽣的信号只能发给前台进程。 ); (3)如果CPU当前正在执⾏这个进程的代码,则该进程的⽤户空间代码暂停执⾏,CPU从⽤ 户态 切换到内核态处理硬件中断。...

weixin_33873846的博客 285

版图学习汇总十一(DRC、LVS注意事项)

esd。

weixin_56071389的博客 2262

Chamfer Loss

ChamferLoss是一种常用于3D点云(pointcloud)处理的损失函数,特别是在点云生成和对齐任务中。它的目的是度量两个点集之间的相似度,特别是在点云重建、配准或生成等任务中,常用于优化模型使得生成的点云更接近真实的点云。

夜空中明亮的星的专栏 455

信号的基本概念(信号产生于处理、可靠信号、可重入函数、SIGCHLD)

一、什么是信号 1、信号的定义   信号是UNIX和Linux系统响应某些条件而产生的一个事件,接收到该信号的进程会相应地采取一些行动。信号是软中断,通常信号是由一个错误产生的。但它们还可以作为进程间通信或修改行为的一种方式,明确地由一个进程发送给另一个进程。一个信号的产生叫生成,接收到一个信号叫捕获。   一个完整的信号周期包括三个部分:信号的产生,信号在进程中的注册,信号在进程中的注销(由内部...

青萍之末的博客 2537

《备考系统分析师》 - 专栏介绍和目录

本专栏提供软考高级系统分析师全套备考资料,包含四大核心内容:1.详细考点梳理(覆盖基础知识、关键技术、案例实践三大模块16个章节);2.历年真题及解析(2009-2022年所有真题含综合知识、案例分析和论文);3.100+篇高质量论文范文;4.预测模拟题。早鸟价仅需9.9元,可节约80%资料搜集时间,帮助考生高效备考、顺利通过考试。专栏持续更新,有问题可随时联系作者。

数据知道的博客 1万+

信号都是如何产生的,干货满满

本文章详细且通俗的解释了信号是如何产生的,并且在这些内容的基础上讲解了很多知识相近的干货巩固理解并拓宽知识面

qq_64484137的博客 4125

华为OD机试真题2025双机位C卷 Java&Go 实现【卡牌游戏】

小明正在尝试一种新的牌游戏。游戏规则只如下:首先,小明拿到一张写有数字m的牌。 然后,他会拿到另外n张牌,上面分别写有不同的数字,牌排成一排。小明的目标是从这排牌中找到一串连续的牌,这些牌上数字的总和可以被 m整除。你的任务是判断小明是否可以完成这个目标。

MISAYAONE的博客 393

ARM系统控制和管理接口System Control and Management Interface

本文档描述了一个可扩展的独立于操作系统的软件接口,用于执行各种系统控制和管理任务,包括电源和性能管理。 本文档描述了系统控制和管理接口(SCMI),它是一组操作系统无关的软件接口,用于系统管理。

AI-安全-功耗 1913

信号的概念,认识,处理动作

一、信号的基本概念 1. 概念 信号 :通知(事情通知),用来通知某个进程发生了某一个事情;事情,信号都是突发事件, 信号是异步发生的,信号也被称呼为“软件中断” 信号名字,都是以SIG开头,上节课SIGHUP(终端断开信号);UNIX以及类(类似)UNIX操作系统(linux,freebsd,solaris);支持的信号数量各不相同。10-60多个之间; 信号既有名字,其实也都是一些数字,信号是一些正整数常量;信号就是宏定义(数字,从1开始) #include <signal.h> find

芒种、的博客 2505

电池管理系统(BMS)软件:CATL BMS二次开发_(1).CATL BMS软件概述

CATL BMS软件的保护机制是确保电池组安全和可靠运行的关键部分。通过高精度的传感器和智能算法,BMS可以实时监测电池组的状态,及时采取保护措施。二次开发中,可以根据特定的应用需求,增加新的传感器、优化算法、扩展通信接口等,进一步提高系统的性能和可靠性。维护和扩展则是确保系统长期稳定运行的重要手段。希望以上内容对您理解CATL BMS软件的保护机制有所帮助。如果您有任何进一步的问题或需要更详细的解释,欢迎随时提问。

zhubeibei168的博客 1459

Linux系统编程 | 信号的基本概念与产生

信号本质是一种通知机制用户或操作系统可通过发送信号通知进程某些事件已发生,让进程后续进行处理。信号的产生,相对于进程的进行,是异步的。我们可以通过生活中的信号进行类比理解。生活中的信号,是闹钟,将人从睡眠状态唤醒;是快递到站通知,通知你去快递站取快递;是敲门声,通知你开门…一言概之,信号中断人正在做的事情。什么是同步?什么是异步?同步:就像一群人排队依次通过安检,每个人都要等前面的人完成安检后才能前进,大家的行动是依次进行、相互等待的,这就是同步,在这个过程中每个环节是。

mooridy的博客 1150

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【Linux初阶】信号入门 | 信号基本概念+信号产生+核心转储

Linux信号的基本概念(生活信号、技术信号、信号生命周期、信号的保存位置和发送本质),信号的产生(四种方式、一个系统调用接口)

Captain_ldx的博客 900

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【Linux】信号的基本概念、信号的产生、记录与处理

一、信号的基本概念 信号在我们生活中随处可见,上课铃声、喇叭、红绿灯、警报、闹钟、电话铃声.....等等。我们知道即使信号没有产生,我们也知道该如何处理它,比如,红灯我们就该停,电话响就该接....。那是因为在第一次遇到他时,我们就记住了它的特征及其处理方法,所以我么就知道,如果产生这种信号该怎么办。那么总结如下: 生活中:① 信号的产生的随机的;②  信号没有产生时,我们也知道它的作用;③ ...

Miss_Monster的博客 546

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

信号的基本概念以及信号的产生

一. 信号产生的场景      1. 用户输入命令, 在shell 启动一个前台进程      2. 当用户按一下 Ctrl + C 的时候,从键盘产生一个硬件中断      3. 此时CPU 正在执行这个进程的带代码, 则该进程的执行代码暂停执行, CPU 从用户态切换到内核态处理该硬件中断.      4. 中断驱动程序将Ctrl + C 解释为一个 SIGIN 信号, 记在该进程的 ...

qq_41027326的博客 838

信号的基本概念及产生信号

本节讲述重点: 1.信号的基本概念: 2.一些常用的特殊信号的深入了解(用代码呈现) 3.了解核心转储Core Dump 4.信号的产生方式:(4种)(mykill代码) 1.信号的基本概念: 首先使用kill -l命令查看系统定义的信号列表: 由于没有32、33信号,所以信号共有62个。其中编号34以上为实时信号,我们先来讨论34以下的信号。 我们来看看signal(7),可...

xiaodu655的博客 2074

信号的基本概念及产生方式

信号的基本概念    通俗一点说,信号一般做提醒工作,提醒之后会产生一系列的动作,比如红绿灯:过马路见到红灯亮了,提醒自己应该停止过马路,或者听到闹钟响了,或许很多人的动作是关掉闹钟后接着睡吧,但接着睡也是一种动作吧。    在计算机中,信号是由操作系统发出的。首先先看一下计算机中的信号吧。 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTR...

DuckyLoser的博客 1581

Linux下的信号(一)----信号的基本概念与产生

一,信号的基本概念1,什么是信号? 日常生活中,当我们走到马路上时,看到的绿灯是一种信号,它能提示我们怎样安全的过马路。又比如,新学期开始学校给每个班发的课表也是一种信号,它能提示同学们在适当的时间地点去上相应的课程而不是虚度光阴……生活中其实我们忽略了很多信号,正是由于这些信号的存在,才使得我们的生活方便而有序。 总结一下你会发现信号是什么,信号就是当你看到它是知道

snow_5288的博客 2154

进程-信号的基本概念和产生函数

信号是Linux进程间通信的最古老方式。信号是软件中断,它是在软件层次上对中断机制的一种模拟,是一种异步通信的方式。信号可以导致一个正在运行的进程被另一个正在运行的异步进程中断,转而处理某一个突发事件。这里我们学习的信号就是属于这么一种中断。我们在终端上敲Ctrl + c就产生了一个中断,相当于产生了一个信号,接着就会处理这个一个中断任务信号的特点:1.简单2.不能携带大量信息3.满足某个特设条件才能发送。...

weixin_43754049的博客 249

Linux系统编程——信号的基本概念(信号产生于处理、可靠信号、可重入函数、SIGCHLD)

信号是UNIX和Linux系统响应某些条件而产生的一个事件,接收到该信号的进程会相应地采取一些行动。信号是软中断,通常信号是由一个错误产生的。但它们还可以作为进程间通信或修改行为的一种方式,明确地由一个进程发送给另一个进程。一个信号的产生叫生成,接收到一个信号叫捕获。一个完整的信号周期包括三个部分:信号的产生,信号在进程中的注册,信号在进程中的注销(由内部机制完成),执行信号处理函数。如下图所示:重点是信号的产生与处理。

qq_74811378的博客 1141

【信号】信号产生 {信号的基本概念;常见的信号;信号产生的4种方法;core dump核心转储;相关系统调用:signal,kill,raise,abort,alarm}

【信号】信号产生 {信号的基本概念;常见的信号;信号产生的4种方法;core dump核心转储;相关系统调用:signal,kill,raise,abort,alarm}

52Herzt的博客 761

【linux进程信号(一)】信号的概念以及产生信号的方式

本篇文章着重讲解了信号的基本概念以及信号产生的基本方式,讲解了信号的默认处理方式.内附代码和图文讲解,看完就能学会!

杭电码农-NEO的博客 2143

【linux进程信号(1)】信号的概念以及产生信号的方式

在实际生活中有很多信号的例子,比如红灯停,绿灯行.我们是怎样知道这些信号的呢?首先要识别这个信号,并且要知道如何处理这个信号,在Linux系统中的信号也是如此,至少要做到两点: 识别信号,处理信号.本章重点:本篇文章着重讲解Linux下信号的基本概念以及产生信号的四种方式,本篇文章会带领大家入门信号这一篇章.1.方式一: 终端按键。

2301_77900444的博客 930

ChuckTalk----------LinuX信号概念/信号产生/信号处理等基本概念的详解解读

信号概念:一种软中断,通知进程发生了某个事情,以打断进程当前任务的一种阻塞操作 信号的整个生命周期:信号的产生->在进程中注册->在进程中注销->信号的处理 1.信号的产生: 信号分为硬件产生和软件产生两种。 硬件:ctrl+c:中断当前进程 ctrl+|:退出当前进程 ctrl+z:停止当前进程 软件:使用kill命令可查看64种信号类型(实质为62种,无32、33) 其中1~...

卖代码的小男孩 278
上一篇: 进程间关系和守护进程
下一篇: 阻塞信号及相关的函数
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值