4.1 信号的概念

4.2 信号的产生

4.3 信号的处理

4.4 Linux中所有信号
- Ctrl+Z SIGINT
- Ctrl+/ SIGQUIT

4.5 信号的实现机制


- 连发两个信号不会马上递送,等第一个信号处理完成之后再处理第二个。
4.6 函数signal 注册信号

4.6.1 信号递送的流程

4.7 注册多个信号

4.8 内核不可中断状态
处于内核不可中断状态(进程控制块的state成员此时为TASK_UNINTERRUPTIBLE)的进程无法接受并处理信号。处于这种的状态的进程在 ps 中显示为D,通常这种状态出现在进程必须不受干扰地等待或者等待事件很快会发生的 时候出现,比如进程正在等待磁盘读写数据的时候。对于非嵌入式程序员而言,这种状态是几乎没办法实现。内核不可中断状态是进程等待态的一种形式。
4.9 多个信号处理同时执行

4.10 重新注册信号处理流程

signal特点


-
mask刚开始为空,当递送信号的过程中会触发一个临时屏蔽,mask会包含这个触犯的信号,当从递送返回的时候mask会删除这个信号。屏蔽的过程中如果产生信号会放入pending中.pending只放一个信号。

-
只发一个信号

-
连着发送两个信号

-
注册两种信号

三个信号


- 三个信号



4.11 函数sigaction注册信号(了解)



- sigaction和signal其他的都一样,只不过他不会重启低速系统调用
sa_flags的取值集合







sa_mask设置阻塞集合







4.12 系统调用sigpending

4.13 sigprocmask 实现全程阻塞




4.14 kill 系统调用

4.15 pause 和sigsuspend



4.16 sleep 和系统时间
sleep 的一种实现方法


当然,POSIX标准并没有规定 sleep 采用哪种具体实现,尽管目前Linux普遍采用 nanosleep 实现
sleep ,但是为了兼容性,使用 sleep 的时候不用混用 alarm
4.17 时钟处理





1043

被折叠的 条评论
为什么被折叠?



