👦个人主页:Weraphael
✍🏻作者简介:目前正在学习c++和算法
✈️专栏:Linux
🐋 希望大家多多支持,咱一起进步!😁
如果文章有啥瑕疵,希望大佬指点一二
如果文章对你有帮助的话
欢迎 评论💬 点赞👍🏻 收藏 📂 加关注😍
一、生活角度的信号
在我们日常生活中,信号是随处可见的,比如:
- 红绿灯
- 上下课铃声
- 发令枪
...
因为我们都接受过教育(识别信号),当产生这些信号时,会立马想到对应的处理动作,但不一定会立马去处理,因为现在可能正在做更重要的事,直到在合适的时候处理。比方说:闹钟一响就要起床学习【进程信号】,可是被窝太香了,起不来。所以,在信号产生后到信号处理这段期间内,必须记住(保存)信号。
二、进程信号的理解
- 类似地,进程也必须能够识别和处理信号的能力。程序员们给操作系统内置了一批指令,一个指令表示一种特殊动作,而这些指令就是信号(进程信号)
- 当进程收到一个具体信号的时候,进程可能并不会立即处理这个信号,等到合适的时候处理。
- 一个进程从信号产生后到信号处理这段期间内,必须保存信号,等到合适的时候处理。
在Linux
中,可以通过以下命令查看当前系统中的信号列表
kill -l
以上是当前系统中的 进程信号,一共 62
个,其中 1~31
号信号为 普通信号(重点学习);剩下的 34~64
号信号为 实时信号(不考虑)。
- 普通信号:根据时间片实行公平调度,适用于个人电脑。(识别信号后可以不立即处理)
- 实时信号:高响应,适合任务较少、需要快速处理的平台,比如汽车车机、火箭发射控制台。(识别信号后必须立即处理)
注意:在Linux
中,信号本质上就是一个数字,诸如:SIGKILL
、SIGINT
等这些其实是宏。
三、31个普通信号的作用
信号编号 | 信号名 | 信号含义 |
---|---|---|
1 |
SIGHUP |
如果终端接口检测到一个连接断开,默认处理动作是终止进程。 |
2 |
SIGINT |
它的含义是Interrupt (中断)。这个信号通常由用户通过键盘(Ctrl + c )发送,默认是中断当前进程的运行。 |
3 |
SIGQUIT |
当用户按组合键(一般采用Ctrl+\ )时,该信号不仅终止前台进程组,同时会产生一个core 文件。 |
4 |
SIGILL |
此信号表示进程已执行一条非法指令,该信号的默认处理动作是终止进程,同时产生一个core 文件。 |
5 |
SIGTRAP |
该信号由断点指令或其他trap 指令产生,该信号的默认处理动作是终止进程,同时会产生一个core 文件。 |
6 |
SIGABRT |
调用abort 函数是产生此信号,进程异常终止,同时会产生一个core 文件。 |
7 |
SIGBUS |
当出现某些类型的内存故障时,常常产生该信号,该信号的默认处理动作是终止进程,同时产生一个core 文件。 |
8 |
SIGFPE |
此信号表示一个算术运算异常,比如除0 、浮点溢出等,该信号的默认处理动作是终止进程,同时产生一个core 文件。 |
9 |
SIGKILL |