信号:1、最初被引入作为用户态进程间通信2、内核也使用信号通知进程系统所发生的事件3、信号很短,发送给进程的唯一信息通常是一个数。4、名称通常以SIG为前缀5、信号时可消费资源,每个信号只能被传递一次 使用信号的目标:1、让进程知道已经发送了一个特定的事件2、强迫进程执行它自己代码中的信号处理程序。 信号分两类:1、常规信号(regular signal):编码范围(0~31),同种类型的常规信号并不排队,一个常规信号被发送多次,只有其中一个被收到。2、实时信号(real-time signal):编码范围(32~64),需要排队,以便多个信号都能被收到3、Linux内核并不使用实时信号。 信号传递的两个不同阶段:1、信号产生:内核更新目标进程的数据结构以表示一个新的信号已被发出。2、信号传递:内核强迫目标进程通过以下方式对信号作出反应:a、改变目标进程的执行状态;b、开始执行一个特定的信号处理程序;c、两者都是。 挂起信号(pending signal):1、已经产生还没有传递到信号;2、任何时候一个进程仅存在给定类型的一个挂起信号;相同的其他信号不排队,简单的丢弃掉3、如果是实时信号,同种类型的挂起信号可以有好几个,它支持排队。 信号处理程序:1、不必是可以重入的,相同类型的信号再次出现不会中断正在进行的信号处理程序,它会被屏蔽。 进程应答信号的三种方式:1、显式的忽略信号2、执行与信号相关的缺省操作terminate、dump、ignore、stop、continue。3、通过调用相应的信号处理函数捕获信号。 信号阻塞和忽略的差异:1、信号被阻塞,它就不被传递,只有解除阻塞后才被传递2、信号被忽略,它还是被传递,只是不被处理 SIGKILL、SIGSTOP 这两个信号不能被阻塞、忽略、捕获;接收到的进程必须执行它们对应的缺省操作。
时间: 2024-10-03 15:10:59