Linux 信号的基本概念

信号的基本概念

1. 信号的概念

信号是Linux系统响应某些条件产生的一些事件。接收到信号的进程会相应地采取一些行动。

2. 信号的生成

信号是由于某些错误条件而生成的,如内存段冲突、浮点处理器错误或非法指令等。信号的生成其实就是一种软件层次的中断,信号由shell和终端处理器生成来引起中断,信号还可以作为在进程间传递消息或修改行为的一种方式,明确地由一个进程发送给另一个进程。一个进程要么正常结束,要么就是某一个信号把这个进程中断了。

3.信号的响应方式

信号产生之后,进程接收这个信号,然后做出一些响应,做出的响应有三种方式,默认方式、忽略和自定义。改变这三种响应方式要通过系统调用signal()。

与信号有关的系统调用在"signal.h"头文件中有声明。

4. 信号名称的定义

信号的值在系统源码中的定义如下,它们都以SIG开头:

(1)#define SIGHUP 1 连接挂断

(2)#define SIGINT 2 终端中断,键盘按下Ctrl+c时,会产生该信号

(3)#define SIGQUIT 3 终端退出

(4)#define SIGILL 4 *非法指令

(5)#define SIGTRAP 5 由断点指令或其它陷阱(trap)指令产生

(6)#define SIGABRT 6 调用abort函数生成的信号

(7)#define SIGIOT 6 建立CORE文件,执行I/O自陷

(8)#define SIGBUS 7 建立CORE文件,总线错误

(9)#define SIGFPE 8 建立CORE文件,浮点异常

(10)#define SIGKILL 9 终止进程,杀死进程,该信号的响应方式不允许改变

(11)#define SIGUSR1 10 终止进程,用户定义信号1

(12)#define SIGSEGV 11 建立CORE文件,段非法错误

(13)#define SIGUSR2 12 终止进程,用户定义信号2

(14)#define SIGPIPE 13 终止进程、向一个没有读进程的管道写数据,读端关闭的描述符,写端写入时产生,该信号会终止程序

(15)#define SIGALRM 14 终止进程,计时器到时

(16) #define SIGTERM 15 终止进程,软件终止信号,系统kill命令默认发送的信号

(17)#define SIGSTKFLT 16

(18)#define SIGCHLD 17 忽略信号,当子进程停止或退出时会默认给父进程发送该信号

(19)#define SIGCONT 18 忽略信号,继续执行一个停止的进程

(20)#define SIGSTOP 19 停止进程 非终端来的停止信号

(21)#define SIGTSTP 20 停止进程,终端来的停止信号 Ctrl+Z

(22)#define SIGTTIN 21 停止进程,后台进程读终端

(23)#define SIGTTOU 22 停止进程,后台进程写终端

(24)#define SIGURG 23 忽略信号,I/O紧急信号

5.信号的实现

收到信号的实体是一个进程,信号的实现在进程的PCB中记录,在PCB中有一个长整型变量signa:long a;,它有32个位,一开始它的值都为0,表示没有收到信号,假如现在通过kill(pid,sig)发送了一个信号,然后通过pid找到对应的PCB中的a,如果通过信号代号把a的1偏移对应的代号个位置,就代表当前进程收到了对应的代号的信号,接下来要处理这个信号,处理完这个信号的时候在把a恢复成0就可以了。如果极短时间内连续发送多个代号相同的信号,其实只能响应一次,因为第一次发送该信号时就已经把a的1偏移了对应的代号个位置,后面再发送相同的信号时是没有变化的,所以当a发生偏移还没有恢复之前,连续发送相同的信号没有意义。

相关推荐
小白跃升坊11 分钟前
基于1Panel的AI运维
linux·运维·人工智能·ai大模型·教学·ai agent
跃渊Yuey29 分钟前
【Linux】线程同步与互斥
linux·笔记
杨江30 分钟前
seafile docker安装说明
运维
舰长11532 分钟前
linux 实现文件共享的实现方式比较
linux·服务器·网络
好好沉淀38 分钟前
Docker开发笔记(详解)
运维·docker·容器
zmjjdank1ng1 小时前
Linux 输出重定向
linux·运维
路由侠内网穿透.1 小时前
本地部署智能家居集成解决方案 ESPHome 并实现外部访问( Linux 版本)
linux·运维·服务器·网络协议·智能家居
树℡独1 小时前
ns-3仿真之应用层(三)
运维·服务器·ns3
VekiSon1 小时前
Linux内核驱动——基础概念与开发环境搭建
linux·运维·服务器·c语言·arm开发
zl_dfq2 小时前
Linux 之 【进程信号】(signal、kill、raise、abort、alarm、Core Dump核心转储机制)
linux