rod*_*igo 15
你是exit()从信号处理程序调用的吗?
在man 7 signal,部分异步信号安全功能中,您可以看到从信号处理程序调用时保证可以工作的所有功能:
信号处理函数必须非常小心,因为其他地方的处理可能在程序执行中的某个任意点处中断.POSIX具有"安全功能"的概念.如果信号中断了不安全函数的执行,并且处理程序调用了不安全函数,则程序的行为是未定义的.
POSIX.1-2004(也称为POSIX.1-2001技术勘误2)要求实现以保证在信号处理程序内可以安全地调用以下函数:
在那里,你可以看到的功能_Exit(),_exit()和abort(),但不显着exit().所以你不应该从信号处理程序中调用它.
令人讨厌的是,即使你从一个信号处理程序(printf()任何?)调用一个不安全的函数,它只会在大部分时间工作......但并非总是如此.