进程信号理解3
1.什么叫做信号递达
实际执行信号的处理动作叫做信号递达,比如默认,忽略,自定义动作
2.什么叫做信号未决?
信号产生到信号递达的状态叫做信号未决
3.进程被阻塞和进程被忽略有什么区别?
进程被阻塞属于信号未决,如果进程没有被解除阻塞,就一直不能信号递达
而进程被忽略属于信号递达其中一种动作,即忽略。
4.信号处理的内核过程
先取出pending里为1的数组下标,访问handler【signal】,判断是为0,还是为1,0则默认动作,1则忽略动作,如果二者都不是则调用自定义动作(handler{signal} 是一个函数指针)
block 表示进程是否被阻塞
pending 表示进程是否收到信号
handler 表示函数调用的地址
5.信号处理的本质?
OS向进程写入信号,先检测pending有哪个比特位为1(数组内容),再去看看block里对应位是否为1,为1执行阻塞,不能被信号递达,为0,再去handler里判断后续信号处理动作。
即 pending ——》 block ——》 handler
6.如果我们对所以的信号都捕捉了,是不是这个进程就是不死金身了?
错,9号信号不能被捕捉,即会留下一个信号用于终结该进程。
7.对信号都阻塞,那么进程是不是不死金身?
不是,9号信号不可被捕捉,不可被阻塞,只要 kiLL -9 pid 了,进程就会被终止。
8.信号处理什么时候合适?
从内核态返回到用户态,OS会做相关的检测
9.进程的用户级页表和内核级页表?
用户级页表为0-3G 每个进程都有一份属于自己的用户级页表
而内核级页表为3-4G 所有的进程共享一份内核级页表。