目录

一、信号

◎ 基本概念

◎ 简单分类

二、信号的产生

◎ 通过终端按键产生信号

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

◎ 由软件条件产生信号

三、信号的处理动作

◎ 忽略此信号

◎ 执行该信号的默认处理信号

◎ 提供一个信号处理函数


一、信号

◎ 基本概念

信号机制是一种异步的通知机制,用来提醒进程一个事件已经发生。当一个信号发送给一个进程,操作系统中断了进程正常的控制流程,此时,任何非原子操作都将被中断。如果进程定义了信号的处理函数,那么它将被执行,否则就执行默认的处理函数。举个例子:

① 用户输入命令,在shell下启动一个前台进程

② 用户键盘输入Ctrl+C产生一个硬件中断。如果当前CPU正在执行这个程序的代码,则代码暂停执行,CPU从用户态切到内核态来处理这个硬件中断

③ 终端驱动程序将Ctrl+C解释成SIGINT信号,记录在该进程的PCB中;

④ 当某个时刻要从内核态返回该进程用户空间代码继续执行,首先要处理PCB中记录的信号,发现有一个SIGINT信号未处理,而这个信号的默认处理动作是终止进程,所以直接终止进程而不再返回它的用户空间代码执行。

◎ 简单分类

使用 kill -l 命令可以查看系统定义的信号列表:

对这些信号做一个简单的分类:1~31这31个信号称为非实时信号,它们不支持排队,都不可靠;而34~64这31个信号是实时信号,支持排队,都是可靠信号。

二、信号的产生

产生信号的主要方式有:① 通过终端按键产生信号;② 调用系统函数向进程发信号;③ 由软件条件产生信号。

◎ 通过终端按键产生信号

用户在终端按下某些键时,终端驱动程序会向前台进程发送信号。比如Ctrl+C 产生SIGINT信号,Ctrl+\ 产生SIGQUIT信号,Ctrl+Z 产生SIGTSTP信号等。

其中,SIGTSTP信号的默认处理动作是终止进程并且Core Dump。Core Dump是指当一个进程异常终止时,可以选择把进程的用户空间内存数据全部保存到磁盘上,文件名通常为core。进程异常终止通常是因为Bug,事后可以通过调试器检查core文件以查找错误原因,这叫做Post-mortem Debug(事后调试)。默认是不允许产生core文件的,但开发调试阶段可以用ulimit命令改变这个限制,允许产生core文件。

ulimit -a (显示当前所有的资源限制):

ulimit -c 1024 (允许core文件最大为1024k):

在前台执行一个死循环程序,然后在终端键入Ctrl+\:

这时会生成一个core文件,接着就可以使用core文件了:

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

命令部分学过,利用kill 命令可以发送信号给某个进程,而kill命令是调用kill函数实现的。当内核检测到某种软件条件发生时已可以通过信号通知进程,比如闹钟超时产生SIGALRM信号,向读端已关闭的管道写数据时产生SIGPIPE信号等。

在后台执行死循环程序,用kill命令向它发送SIGSEGV信号:

kill命令是调用kill 函数实现的。kill 函数可以给一个指定的进程发送指定的信号。

raise函数可以给当前进程发送指定信号(自己向自己发送信号)。

运行结果:

◎ 由软件条件产生信号

调用alarm 函数可以设定一个闹钟,即告诉内核在seconds 秒之后给当前进程发送SIGALRM信号,该信号的默认处理动作是终止当前进程。

这个程序的作用是1秒之内一直累加,1秒之后被SIGALRM信号终止。

运行结果:

三、信号的处理动作

◎ 忽略此信号

◎ 执行该信号的默认处理信号

◎ 提供一个信号处理函数

        要求内核在出炉该信号时切换到用户态执行这个处理函数,这种方式称为捕捉一个信号。

signal函数

Linux信号的产生和处理相关推荐

  1. Linux shell 学习笔记(12)— linux 信号、后台运行脚本、作业控制、定时运行任务

    1. 处理信号 1.1 Linux 信号 常见的 Linux 信号如下表所示: 信号 值 描述 1 SIGHUP 挂起进程 2 SIGINT 终止进程 3 SIGQUIT 停止进程 9 SIGKILL ...

  2. linux信号(signal) 机制分析

    1       信号本质 软中断信号(signal,又简称为信号)用来通知进程发生了异步事件.在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的. ...

  3. linux 信号 core,Shell 信号发送与捕捉

    原标题:Shell 信号发送与捕捉 作者:李振良OK 1.Linux信号类型 信号(Signal):信号是在软件层次上对中断机制的一种模拟,通过给一个进程发送信号,执行相应的处理函数. 进程可以通过三 ...

  4. Linux信号 一 信号可靠性与分类

    开发SNMP的时候用到了Linux信号机制,总结了一下关于信号的知识. 信号是一种进程间通信手段,本质是一种软件中断,用来处理异步事件.信号机制是Unix家族里一个古老的通信机制.传统的信号机制有一些 ...

  5. linux信号使用,linux信号使用注意事项

    1.不要在信号处理函数中处理复杂的事情 2.信号处理函数中不能有互斥锁会造成死锁,可以用信号量替代 3.信号是置位方式实现,多次发送相同的信号可能只会收到一次 4.子进程具有继承父类信号屏蔽,不能在信 ...

  6. 非常好的一篇对linux信号(signal)的解析

    [摘要]本文分析了Linux内核对于信号的实现机制和应用层的相关处理.首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理.接着分析了内核对于信号的处理流程包括信号的触发/注册/执 ...

  7. 【Linux系统编程】Linux信号列表

    00. 目录 文章目录 00. 目录 01. Linux信号编号 02. 信号简介 03. 特殊信号 04. 附录 01. Linux信号编号 在 Linux 下,每个信号的名字都以字符 SIG 开头 ...

  8. linux信号以及core

    linux信号以及core 何为信号 信号(signal)用于通知进程发生了某种情况.进程有以下3种处理信号的方式: 忽略信号.有些信号表示硬件异常,例如,除以0或访问进程地址空间以外的存储单元等,因 ...

  9. linux 信号没有被处理方法,[计算机]Linux 信号signal处理机制.doc

    [计算机]Linux 信号signal处理机制 Linux 信号signal处理机制 信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念.Linux对信号机制的大致实现方法.如何使 ...

  10. Linux信号实践(2) --信号分类

    信号分类 不可靠信号 Linux信号机制基本上是从UNIX系统中继承过来的.早期UNIX系统中的信号机制比较简单和原始,后来在实践中暴露出一些问题,它的主要问题是: 1.进程每次处理信号后,就将对信号 ...

最新文章

  1. LayoutInflater的inflate函数用法详解
  2. 【Android FFMPEG 开发】FFMPEG AVFrame 图像格式转换 YUV - RGBA ( 获取 SwsContext | 初始化图像数据存储内存 | 图像格式转换 )
  3. MySQL 8.0 技术详解
  4. 人工智能的炒作_解密人工智能:是炒作还是我们期望太高
  5. Web service 介绍与简单应用
  6. 【HDU - 2444】The Accomodation of Students(二分图判断 + 匈牙利算法求最大匹配)
  7. webstorm 不识别.config文件_用TypeScript开发手势库 - (2)tsconfigamp; rollup.configamp;npx...
  8. 黑苹果Mojave下驱动高通模块Atheros DHXA-195(AR9285无线网卡和AR3011 蓝牙3.0)
  9. (xsinx)/(1+(cosx)^2)在0到π上的定积分
  10. 湖南职称计算机模拟试题,湖南职称计算机考试培训软件:集职称计算机考试模拟题、长沙职称计算机考试题库...
  11. 游戏思考11:游戏服务器类型简单分类(有服务器的会讲的详细一点)
  12. FTP报550异常-Create directory operation failed
  13. 关于即将到来的软件行业的降维打击的几点想法
  14. 电脑 显示 无可用电源选项 怎么办
  15. 计算机专业怎么选择笔记本,选错一次,后悔四年!不同专业的大学生如何选笔记本电脑?...
  16. 当我说转行大数据工程师时,众人笑我太疯癫,直到四个月后......
  17. logstash String转data,@timestamp转化为东八区时间
  18. 青龙羊毛——酷狗音乐(教程)
  19. Javascript在线美化,格式化,js美化
  20. 线性代数复习笔记——第一章

热门文章

  1. mysql 数据库乱码_Mysql数据库乱码问题的对应方式
  2. Veeam ONE v10.0.2.1094 安装教程+许可证
  3. vSAN其实很简单-运维工程师眼里的vSAN
  4. ZooKeeper学习总结(4)——Zookeeper选举机制总结
  5. Java设计模式学习总结(4)——创建型模式之单例模式
  6. SSO单点登录学习总结(3)—— 基于CAS实现单点登录实例
  7. .net5 不支持winform_「开源资讯」.NET 5.0 RC 2 发布
  8. BIO、NIO、AIO入门认识
  9. Google开发者大会:你不得不知的Tensorflow小技巧
  10. 远程桌面和云主机,可以听到云主机内部的声音