Linux信号相关学习

        Linux假如现在在一个信号处理程序中,当有一个新的信号来临时会先中断目前的信号处理程序,进入新信号的信号处理程序,处理完毕后返回继续执行,如果在新信号处理程序中调用longjmp函数,则就会破坏刚才中断的信号处理程序,造成刚才中断的信号处理程序不能执行完毕后面无法执行了。sigsuspend和pause函数都会受当前进程的信号屏蔽字的影响,对在当前屏蔽字中的信号不能唤醒由这两个函数造成休眠的进程,sigsuspend函数的作用是将当前进程屏蔽字设置成函数参数指定的,然后休眠,唤醒后设置会函数调用前的信号屏蔽字。如果一个进程同时注册SIGCHLD信号处理和wait子进程,先处理SIGCHLD处理程序,再从wait返回,如果在调用wait时屏蔽SIGCHLD则wait执行后恢复屏蔽会将阻塞的信号发送给进程。在sigprocmask函数返回前递交给信号处理程序处理。或者是在sigsuspend休眠时递送(此时未在屏蔽字之中)。如果调用pause函数希望在收到这个信号时程序能够唤醒则会造成在递送给pause时会产生竞争条件,在sigprocmask函数返回前已经递交过了,所以会造成pause永远休眠。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

*