在信号处理程序中调用标准库函数

时间:2010-03-17 10:50:30

标签: c unix gcc signals

为什么不鼓励在信号处理程序中调用标准库函数?

4 个答案:

答案 0 :(得分:11)

GNU LibC documentation中解释了这一点。

  

如果在处理程序中调用某个函数,请确保它在信号方面是可重入的,否则请确保该信号不会中断对相关函数的调用。

以防万一,这里是可重入函数的Wikipedia page

  

如果计算机程序或例程在之前的调用完成之前可以安全地再次调用(即可以同时安全地执行),则它被描述为可重入的。

答案 1 :(得分:1)

它不仅是重入问题,取决于作为服务的信号,您还希望避免无意中调用malloc()(即asprintf())和其他可变扩展(即printf())。

答案 2 :(得分:1)

这一切都运行正常,直到你遇到一些完全无法追踪的神秘错误:)

man 7 signal将为您提供一个系统调用列表,可以安全地从信号处理程序调用。它也在POSIX中描述。

答案 3 :(得分:0)

因为库函数可能不可重入。