信号处理程序为什么在处理相同信号时被阻塞

时间:2012-01-20 11:51:02

标签: c linux signals

出于理论目的:我使用signal()关联SIGINT的处理程序。当处理该信号时,即执行信号处理程序时,默认情况下阻止相同的信号。阻止背后的原因是什么?它会导致僵局吗?请澄清一下。

1 个答案:

答案 0 :(得分:3)

因为预计信号处理程序不会重入。

信号处理程序通常运行速度很快,应该只调用异步安全函数,即一组非常有限的函数,请参阅signal(7)

你通常不希望它本身可以调用。

除非您没有从信号中正常返回(或在其中执行siglongjmp),否则在信号处理程序完成后将恢复先前的信号掩码。

但是,您可以安装一个不会阻止自身的信号处理程序(通过sigaction)。

出于类似的原因,在通常的处理器上,intterupt处理程序也在快速运行并且禁用中断。