信 的概念
信 在我们的生活中随处可见, 如:古代战争中摔杯为 ;现代战争中的信 弹;体育比赛中使用的信 枪… 他们都有共性:
- 简单
- 不能携带大量信息,只能带一个标志。
- 满足某个特设条件才发送。
Unix 早期版本就提供了信 机制,但不可靠,信 可能丢失。Berkeley 和 AT&T 都对信 模型做了更改,增加 了可靠信 机制。但彼此不兼容。POSIX.1 对可靠信 例程进行了标准化。
信 的机制
A 给 B 发送信 ,B 收到信 之前执行自己的代码,收到信 后,不管执行到程序的什么位置,都要暂停运行, 去处理信 ,处理完毕再继续执行。与硬件中断类似——异步模式。但信 是软件层面上实现的中断,早期常被称 为“软中断”。
信 的特质
由于信 是通过软件方法实现,其实现手段导致信 有很强的延时性。但对于用户来说,这个延 迟时间非常短,不易察觉。
每个进程收到的所有信 ,都是由内核负责发送的,内核处理。
与信 相关的事件和状态
产生信 :
- 按键产生,如:Ctrl+c(死循环终止)、Ctrl+z、Ctrl+
- 系统调用产生,如:kill、raise、abort
- 软件条件产生,如:定时器 alarm
- 硬件异常产生,如:非法访问内存(段错误)、除 0(浮点数例外)、内存对齐出错(总线错误)
- 命令产生,如:kill 命令
递达:
递送并且到达进程。产生到递达是瞬时的
未决:
产生和递达之间的状态。主要由于阻塞(屏蔽)导致该状态。
信 的处理方式:
- 执行默认动作
- . 忽略(丢弃)
- 捕捉(调用户处理函数) (不让它执行默认动作)
Linux 内核的进程控制块 PCB 是一个结构体,task_struct, 除了包含进程 id,状态,工作目录,用户 id,组 id, 文件描述符表,还包含了信 相关的信息,主要指阻塞信 集和未决信 集。
阻塞信 集(信 屏蔽字):
描述信 屏蔽状态,将某些信 加入集合,对他们设置屏蔽,当屏蔽 x 信 后,再收到该信 ,该信 的处理将推后(解除屏蔽后) 阻塞信 集影响未决信 集。
未决信 集:
没有处理掉
- 信 产生,未决信 集中描述该信 的位立刻翻转为 1,表信 处于未决状态。当信 被处理对应位翻 转回为 0。这一时刻往往非常短暂。
- 信 产生后由于某些原因(主要是阻塞)不能抵达。这类信 的集合称之为未决信 集。在屏蔽解除前, 信 一直处于未决状态。
信 的编
可以使用 kill–l 命令查看当前系统可使用的信 有哪些。
setitimer 函数
设置定时器(闹钟)。 可代替 alarm 函数。精度微秒 us,可以实现周期定时。
成功:0;失败:-1,设置 errno
参数:
which:指定定时方式
- 自然定时:ITIMER_REAL → 14)SIGLARM 计算自然时间
- 虚拟空间计时(用户空间):ITIMER_VIRTUAL → 26)SIGVTALRM 只计算进程占用 cpu 的时间
- 运行时计时(用户+内核):ITIMER_PROF → 27)SIGPROF 计算占用 cpu 及执行系统调用的时间
使用 setitimer 函数实现 alarm 函数,计算1是内计算机计算次数
结合 manpage 编写程序,测试 it_interval、it_value 这两个参数的作用。
void (*signal (int signum,void ( *sighandler_t)(int)))(int);

注意
- it_inter :用来设定两次定时任务之间间隔的时间。
- it_value:定时的时长 两个参数都设置为 0,即清 0 操作。
文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux入门初识Linux25019 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!