信号发生时,信号函数调用了系统函数如malloc。main主进程中也调用这个系统函数malloc。这种情况下会给main主进程的malloc调用带来不可预期的结果。因为malloc维护着一个内存分配的链表,信号函数也会对这个链表做修改。固malloc为不可重入函数。反之两者同时调用,而不会相互影响的则为可重入函数。
不可重入函数,通常包括以下特点: a:使用静态数据结构;b:调用malloc或者free;c:标准io函数,比如printf
另外需要注意的是:每个线程只有一个errno,信号处理函数可能会改变原来的errno值。所以一般在信号处理函数开始处,先保留errno的值,待信号处理函数结束后,再将开始保存下来的值赋值给errno。不对main函数的errno产生影响。