Skip to content

Commit 1caabfb

Browse files
committed
Update chapter10.md
1 parent 70671b4 commit 1caabfb

1 file changed

Lines changed: 2 additions & 0 deletions

File tree

AUP2/chapter10.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
# 信号概念
22
信号, 就是软件中断, 用于很多异步事件模型中. 每个信号都有一个名字, 以SIG开头, 如SIGALRM是闹钟信号. 在<signal.h>中定义, 不存在编号为0的信号, 有很多条件产生信号:
3+
34
1. 用户按下终端键时如按`CRTL + C`, 产生`SIGINT`信号.
45
1. 硬件异常. 如引用无用内存(`SIGSEGV`), 除数为0
56
1. 用户调用kill(1)发送给其它进程. 如我们控制台输入: kill -9 1234, 则会发送`SIGKILL`信号给1234的进程.
67
1. 进程调用kill(2)
78
1. 当检测到某种软件条件发生时, 通知有关进程产生信号. 如`SIGURG`(网络上接收到一个紧急数据名, 像TCP协议中的URG标志报文); `SIGALRM`到时间后也会产生一个信号.
89

910
对信号的处理有一般有如下三种方式:
11+
1012
1. 忽略此信号. 但有两种信息是不能忽略的,如`SIGKILL``SIGSTOP`. 就像我们要强制停止一个进程时, 输入`kill -9 PID`就会产生`SIGKILL`, 这个信号不能忽略.
1113
1. 捕捉信息. 就像事件通知模型, 当发生这种信息, 我们调用一个用户函数来处理我们定义的一些动作. 有两个信号是不能捕捉并定义事件处理的, 就是上面说的`SIGKILL``SIGSTOP`. 这种处理方式是最常用的, 比如我们捕捉`SIGCHLD`来捕捉子进程终止时, 父进程触发事件处理函数, 可以调用waitpid来获得子进程的PID和退出状态, 可以做自己想做的事,也可以防止僵尸进程.
1214
1. 默认系统动作.

0 commit comments

Comments
 (0)