信号的概念|学习笔记

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

开发者学堂课程【物联网开发- 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 不能更改信号的处理方式,因为它们向用户提供了一种使进程终止的可靠方法。

相关文章
|
6月前
|
Linux
网络编程之信号(处理僵尸进程的终极办法)之初识信号捕捉器
接着我们之前的管道所提出来的问题() 在创建子进程之后,子进程究竟何时终止????调用waitpid函数后还要无休止的等待子进程终止吗???”,这显然会是一个问题。因为父进程往往与子进程一样繁忙,因此我们不能只调用waitpid函数来等待子进程终止。那么我们应该怎么办呢??? 信号闪亮登场!!!!!
58 0
信号第一章:常用总结
信号第一章:常用总结
64 0
|
6月前
|
NoSQL Linux 程序员
【linux进程信号(一)】信号的概念以及产生信号的方式
【linux进程信号(一)】信号的概念以及产生信号的方式
|
6月前
|
Linux C语言
Linux系统编程之 Linux信号的编程:信号的基本概念、用法和实现方式
Linux系统编程之 Linux信号的编程:信号的基本概念、用法和实现方式
82 0
|
6月前
|
存储 Linux
Linux系统编程之Linux 信号集编程:信号集的基本概念、用法和实现方式
Linux系统编程之Linux 信号集编程:信号集的基本概念、用法和实现方式
51 0
|
6月前
|
存储 Unix Linux
Linux系统编程(传统信号和实时信号)
Linux系统编程(传统信号和实时信号)
69 0
|
Linux API
linux系统编程 信号
linux系统编程 信号
73 0
|
Linux
Linux 进程信号的基本概念、信号类型、信号处理方式、信号传递机制以及如何使用进程信号进行进程间通信、异常处理
Linux 进程信号的基本概念、信号类型、信号处理方式、信号传递机制以及如何使用进程信号进行进程间通信、异常处理
644 0
进程间通信——信号原理及详解(附有案例代码)
进程间通信——信号原理及详解(附有案例代码)
|
算法
labview信号时域分析编程笔记
labview信号时域分析编程笔记
147 0