信号的概念|学习笔记

简介: 快速学习信号的概念

开发者学堂课程【物联网开发- Linux 高级程序设计全套视频信号的概念】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/660/detail/11007


信号的概念

 

内容介绍

一、 信号的概述

二、 如何产生信号

三、 如何处理接收到的信号

 

一、信号的概述

信号是软件中断,它是在软件层次上对中断机制的一种模拟.

什么叫中断?

举例:假如你在家看电影,有人来敲门,你暂停电影去开门,开完门回来继续看电影,去开门这件事称为中断。中断又分为硬件中断和软件中断。

信号可以导致一个正在运行的进程被另一个正在运行的异步进程中断,转而处理某一个突发事件。

异步:

通讯双方不需要建立一个同步时钟,消息的出现是随机的。

信号是一种异步通信方式。

进程不必等待信号的到达,进程也不知道信号什么时候到达。

信号可以直接进行用户空间进程和内核空间进程的交互,内核进程可以利用它来通知用户空间进程发生了哪些系统事件。

解释:

如非法访问内存导致出现段错误,程序污染,硬件检测到然后通知内核,内核进程产生信号发送给正在运行的应用程序,应用程序收到信号暂停运行,这就是用户进程和内核进程通过信号交流的例子。

每个信号的名字都以字符SIG开头。

每个信号和一个数字编码相对应,在头文件sigmum.h中,这些信号都被定义为正整数。

信号名定义路径:/usr/include/i386-linux gnu/bits/signum.h

在Linux下,要想查看这些信号和编码的对应关系,可使用命令: kill-l

发信号的目的:通知事件

信号简要说明:

SIGHUP终止进程  终端线路挂断

SIGINT终止进程  中断进程

SIGQUIT建立CORE文件终止进程,并且生成core文件

SIGIL建立 CORE文件  非法指令

SIGTRAP建立CORE文件  跟踪自陷

SIGBUS建立CORE文件  总线错误

SIGSEGV建 立CORE文件  段非法错误

SIGFPE建立CORE文件  浮点异常

SIGIOT建立CORE文件  执行1/O自陷

SIGKILL终止进程  杀死进程

SIGPIPE终止进程  向一个没有读进程的管道写数据

SIGALARM终止进程  计时器到时

SIGTERM终止进程  软件终止信号

SIGSTOP停止进程  非终端来的停止信号

SIGTSTP停止进程  终端来的停止信号

SIGCONT忽略信号  继续执行一个停止的进程

SIGURG忽略信号  1/O紧急信号

SIGIO忽略信号  描述符上可以进行I/O

SIGCHLD忽略信号  当子进程停止或退出时通知父进程

SIGTTOU停止进程 后台进程写终端

SIGTTIN停止进程  后台进程读终端

SIGXGPU终止进程  CPU时限超时

SIGXFSZ终止进程  文件长度过长

SIGWINCH忽略信号  窗口大小发生变化

SIGPROF终止进程  统计分布图用计时器到时

SIGUSR1终止进程  用户定义信号1

SIGUSR2终止进程  用户定义信号2

SIGVTALRM终止进程  虚拟计时器到时


二、如何产生信号

1、当用户按某些终端键时,将产生信号。

例如:终端上按“Ctrl+c” 组合键通常产生中断信号SIGINT、 终端上按"Ctrl+\”键通常产生中断信号SIGQUIT.终端上按"Ctl+z"键通常产生中断信号 SIGSTOP。

image.gif2、硬件异常将产生信号。

除数为0,无效的内存访问等。这些情况通常由硬件检测到,并通知内核,然后内核产生适当的信号发送给相应的进程。

3、软件异常将产生信号。

当检测到某种软件条件已发生,并将其通知有关进程时,产生信号。

解释:

如将一个函数设定三秒钟之后自动给当前进程发送一个信号,这里的“三秒钟”则视为软件条件。

4、调用 kill 函数将发送信号。

注意:

接收信号进程和发送信号进程的所有者必须相同,或发送信号进程的所有者必须是超级用户号。

 

三、如何处理接收到的信号

1、执行系统默认动作

对大多数信号来说,系统默认动作是用来终止该进程。

2、忽略此信号

接收到此信号后没有任何动作。

3、执行自定义信号处理函数

注意:

SHRILL 和 SIGSTOP 不能更改信号的处理方式,因为它们向用户提供了一种使进程终止的可靠方法。

相关文章
|
SQL 安全 网络协议
常用和不常用端口一览表收藏
大家在学习计算机的时候,对于最常用的几个端口比如80端口肯定有很深的印象,但是对于其他一些不是那么常用的端口可能就没那么了解。所以,在一些使用频率相对较高的端口上,很容易会引发一些由于陌生而出现的错误,或者被黑客利用某些端口进行入侵。
4547 0
|
供应链 机器人
什么是RPA?
什么是RPA?
1255 0
|
Docker 容器 .NET
System.Drawing.Common在docker报错 The type initializer for 'Gdip' threw an exception
今天在asp.net core站点上做一个发送邮件附带二维码的功能,为了方便邮件接受者直接手机扫描打开特定h5页面。采用QRCoder,代码很简单几行 QRCodeGenerator qrGenerator = new QRCodeGenerator(); QRCodeData qrCodeData = qrGenerator.
4887 0
|
SQL 监控 Java
Java Spring Boot 2.0实战MyBatis连接池阿里Druid与SQL性能监控
阿里开源数据库连接池组件Druid非常强大,,本次课程一起学习如何在最新的Java Spring Boot 2.0和MyBatis系统中集成阿里开源的连接池Druid,以及SQL性能监控,生产环境必备利器。
73588 0
|
Linux Windows
Windows&Linux用户登录失败锁定的配置
假设我们想配置成当登录失败超过5次后锁定30分钟
2502 0
|
监控 关系型数据库 数据库
PostgreSQL pgmetrics - 多版本、健康监控指标采集、报告
标签 PostgreSQL , pgmetrics , check_postgres 背景 pgmetrics,GO写的一款PostgreSQL 多版本、健康监控指标采集、报告开源软件。 https://github.com/rapidloop/pgmetrics 结合pgdash,可以实现被监控PG实例的可视化,指标值变更告警等。
1472 0
|
应用服务中间件 nginx Windows
外网访问内网Nginx
本地安装了一个Nginx,只能在局域网内访问,怎样从外网也能访问到本地的Nginx呢?本文将介绍具体的实现步骤。 1. 准备工作 1.1 安装并启动Nginx 默认安装的Nginx端口是80。 2. 实现步骤 2.1 下载并解压holer软件包 Holer软件包:holer-xxx.tar.gzHoler支持各种OS系统平台,请选择跟本地OS类型匹配的holer软件包。
3286 0
|
新零售 人工智能 自然语言处理
|
JavaScript
js获取当前URL、参数、端口、IP等信息
以下列出均为常用(转自地址为:https://blog.csdn.net/pengShuai007/article/details/78357238?locationNum=9&fps=1 1、设置或获取整个 URL 为字符串 window.
3294 0