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会先转移执行新到来的信号处理流程,执行完毕后恢复原来的信号处理流程,不同的信号的信号处理函数会被打断。(可以类比多重中断理解)

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

相关推荐
三品吉他手会点灯8 小时前
C语言学习笔记 - 48.流程控制2 - 什么是流程控制
c语言·开发语言·笔记·学习
糖果店的幽灵8 小时前
软件测试接口测试从入门到精通:Python接口自动化 - requests库
开发语言·软件测试·python·功能测试·自动化·接口测试
caimouse8 小时前
Reactos 第 10 章 网络操作 — 10.2 NDIS及其实现
服务器·网络
changxiang8 小时前
Jenkins备忘
运维·jenkins
biter down8 小时前
4:Ubuntu 22.04 安装完成后的收尾与优化
linux·运维·ubuntu
凡人叶枫8 小时前
Effective C++ 条款37:绝不重新定义继承而来的缺省参数值
linux·c++·windows
热爱运维的小七8 小时前
深度解析|应用性能 + RUM + 拨测:现代 IT 运维的可观测性“铁三角”
运维·it运维·devops·apm·rum·网站拨测
zhuhai_xigedian8 小时前
物联网技术在源网荷储系统中的创新应用
大数据·运维·人工智能·区块链·能源
zhangfeng11338 小时前
国家超算中心 昆山站 异构加速卡1 显存16GB详细配置, 海光 Z100SM HCU
linux·网络·深度学习·c#
xsc-xyc8 小时前
CasaOS + Docker 挂载外接硬盘部署 Jellyfin 私人影院
运维·docker·容器