Linux下的信号机制


1.Linux内核给一个进程发送信号就在该进程控制结构体对应域设置该信号的位,如果该进程在可中断睡眠则唤醒否则不唤醒该进程。

2.进程检查处理该信号的时机是:即将从内核态返回用户态(系统调用返回)。

3.执行信号的处理函数方法是:内核在用户栈创建一个新的“层”该“层”的返回地址设置成信号处理函数地址,这样进程从内核返回先执行该处理函数,完成后再次返回才执行先前进入内核的地方。原因是信号处理函数不能运行在内核态。

4.如果进程在可中断睡眠收到要忽略的信号,则先被唤醒,然后一般继续睡眠。

5.要注意一点,信号一般是内核发送给进程的,别的进程发送信号也是通过系统调用,比如Kill别的进程,也是通过内核来发送的。

相关内容