出于理论目的:我使用signal()关联SIGINT的处理程序。当处理该信号时,即执行信号处理程序时,默认情况下阻止相同的信号。阻止背后的原因是什么?它会导致僵局吗?请澄清一下。
答案 0 :(得分:3)
因为预计信号处理程序不会重入。
信号处理程序通常运行速度很快,应该只调用异步安全函数,即一组非常有限的函数,请参阅signal(7)。
你通常不希望它本身可以调用。
除非您没有从信号中正常返回(或在其中执行siglongjmp
),否则在信号处理程序完成后将恢复先前的信号掩码。
但是,您可以安装一个不会阻止自身的信号处理程序(通过sigaction
)。
出于类似的原因,在通常的处理器上,intterupt处理程序也在快速运行并且禁用中断。