Linux07(信号01)

#技术笔记

1. 中断针对的是CPU ,而信号针对的是进程 ,信号是一种异步事件通知机制,用于通知进程发生了某件事,所以信号是进程间通信的机制。进程间通信的机制还有管道 (分为有名管道、匿名管道)、消息队列、消息队列、共享内存、信号量、套接字(Socket)、内存映射文件、信箱。

2.信号来源

可以是硬件产生,也可以由软件产生。例如硬件有CPU异常(除零)、键盘中断、栈溢出、非法内存访问、非法指针、总线错误、浮点溢出等,软件有系统调用( kill 之类的)、子进程退出、进程调用abort()、

用户交互:用户通过键盘的操作,例如:ctrl + c, ctrl + \, ctrl + z

输入命令:在终端输入,例如,kill -9 pid ;<-------这里的pid是进程id

程序中:子进程结束,会产生SIGCHLD信号来通知父进程,对已经关闭的读端,进行写,可能会产生SIGPIPE信号

内核产生:硬件的故障

3.常用的信号: 2号信号(ctrl + c) SIGINT、3号信号(ctrl + \) SIGQUIT、9号信号 SIGKILL、18号信号 SIGCONT、19号信号 SIGSTOP(ctrl + z);13号信号SIGPIPE、17号信号SIGCHLD。

4.信号的行为

五种信号行为:

Term/Terminate表示终止进程;

Core表示进程会导出内存映像到文件(一般默认不产生);

Ign表示信号被忽略;

Stop表示暂停进程;

Cont恢复暂停的进程;

5.几种特殊信号的特点

2号信号触发可以用ctrl + c , 或执行 kill -2 pid 或 kill -SIGINT pid; 3号信号的触发可以使用 ctrl + \ , 或 kill -3 pid 或 kill -SIGINT pid, 19号信号触发可以用 ctrl + z, 或 kill -19 pid 或 kill -SIGSTOP pid.

6.信号的传递过程

首先有信号生成,然后信号传递,在信号传递中,内核为信号创建一个信号队列项,并将其加入到目标进程的位图或者信号队列(也就是图中的链表),信号也可能会覆盖旧的信号或者被丢弃,未决信号集有位图和链表,阻塞集合底层也是位图。进程通过修改其信号掩码来阻塞或解除阻塞特定的信,如果一个信号被阻塞,它仍然可以被递送到目标进程,但不会被立即处理。被阻塞的信号会留在待处理信号集合中,直到它们被解除阻塞。当正在运行的进程某一时刻从内核态执行返回用户态时, 在返回之前会先检查待处理信号集合,如果存在未被阻塞的待处理信号,内核会在进程继续执行前(返回用户态之前), 先安排信号处理程序的执行(默认或者自定义程序)。信号传递过程如下图。

  1. 信号注册函数 signal

signal 的第一个参数是传信号编号,第二个是传信号处理的函数(是一个函数指针)。

8.信号的三种处理方式

默认、忽略和自定义行为,在6.信号的传递过程有描述。为了防止用户将所有的信号的默认行为都更改掉,导致进程无法杀死,所以规定了9号和19号信号是不能更改默认处理行为。

9.多信号触发问题

这里得代码多调试感悟,原理先懂。

接收到另一个相同类型的信号 ,则先执行完目前的,再执行后面到来的信号,也就是当前信号处理流程不会中断,相同信号的信号处理函数是串行执行。

接收到了另一个不同类型信号 ,那么当前信号处理流程会被中断,CPU会先转移执行新到来的信号处理流程,执行完毕后恢复原来的信号处理流程,不同的信号的信号处理函数会被打断。(可以类比多重中断理解)

如果接收到了连续重复的相同类型的信号,后面的重复信号会被忽略,从而该信号处理流程只能再多执行一次。

相关推荐
小羊没烦恼!1 分钟前
在.net中读写config文件的各种方法
java·大数据·运维·服务器·前端·数据库·oracle
2601_962885725 分钟前
如何用 Python 获取上证指数、沪深300、中证500 等指数行情?
开发语言·python
Escalating_xu10 分钟前
【Linux 网络编程】网络命令加餐:用 ping、netstat、watch 和 pidof 排查服务问题
linux·运维·网络
Logic10112 分钟前
C语言/数据结构二维数组题解:找出行列O个数均为偶数的格子——奇偶性预处理+二次遍历
c语言·数据结构·算法·二维数组·时间复杂度·动态内存分配·奇偶性
mounter62518 分钟前
现代 Linux 内核在异构内存与硬件演进下的架构变革:压缩 RAM、CXL 与分布式内存
linux·linux kernel·kernel
YH行业报告分析18 分钟前
2026两轴Delta并联机器人深度分析:高速分拣场景下的轻量化自动化升级路径
运维·机器人·自动化
nece00119 分钟前
vbox 为虚拟机配置网络
运维·服务器·网络
张张123y22 分钟前
后端第六课:Python 语法速通(0 基础入门,AI 应用开发的第一门语言)
开发语言·人工智能·python·ai·后端开发
Want59524 分钟前
Python跳动的爱心①
开发语言·python·数学建模
racerun32 分钟前
用于图片上传到服务器
运维·服务器