共62个,前31个普通信号,后31个实时信号,今天关注前31个
九号信号不能被捕捉
信号处理方式
1. 忽略此信号。
2. 执行该信号的默认处理动作。
3. 提供一个信号处理函数,要求内核在处理该信号时切换到用户态执行这个处理函数,这种方式称为捕捉(Catch)一个信号。
信号产生时
如何产生信号呢?
1. 通过终端按键产生信号——通过键盘产生
2. 调用系统函数向进程发信号——这里介绍三个系统调用函数kill,raise,abort
#include <signal.h>
int kill(pid_t pid, int signo);
int raise(int signo);
这两个函数都是成功返回0,错误返回-1。
kill命令是调用kill函数实现的。kill函数可以给一个指定的进程发送指定的信号。raise函数可以给当前进程发送指定
的信号(自己给自己发信号)。
#include <stdlib.h>
void abort(void);
就像exit函数一样,abort函数总是会成功的,所以没有返回值
abort函数使当前进程接收到信号而异常终止。
3. 由软件条件产生信号
alarm(seconds)
#include <unistd.h>
unsigned int alarm(unsigned int seconds);
调用alarm函数可以设定一个闹钟,也就是告诉内核在seconds秒之后给当前进程发SIGALRM信号, 该信号的默认处理动
作是终止当前进程。
4. 硬件异常产生信号(比较重要)
所有的信号都必须经过操作系统的手发出。
信号保存
位图
00000000000 … 00000111 ->32位
比特位的位置,代表的是,是谁 信号的编号
比特位的内容,代表的是,是否 是否受到信号
00100000000 … 00000000 代表收到三号信号
如何实现:
1.信号是给进程发的,task_struct结构体
struct task_struct{
unsigned int sigbitmap = 0;(也就是后文的pending表)
}
2.信号是给操作系统发的,那操作系统如何发送呢?
3.操作系统给进程“发送”信号,实际是给进程写信号。
阻塞信号
信号相关概念
实际执行信号的处理动作称为信号递达(Delivery)——抵达有三种
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Linux运维工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Linux运维知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)
Linux运维知识点,真正体系化!**
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)
[外链图片转存中…(img-oQr24y4o-1712644849807)]