【发布时间】:2011-01-24 07:09:55
【问题描述】:
我必须处理一个可以从大型项目中的不同位置调用的日志记录模块。我遇到的问题是,有时模块可能会从信号处理程序内执行的代码中调用。通常,日志记录模块使用 localtime() 和 strftime() 包含时间数据,但是这些调用当然不是异步信号安全的,如果从信号处理程序中调用可能会导致死锁。有没有办法(在 GNU/Linux 系统上)判断我的代码当前是否在信号处理程序上下文中执行,除了例如让每个信号处理程序在处理时设置一个标志?我认为简化我们的信号处理程序会更好,但在这种情况下,我无法选择调用日志模块的位置。如果我可以测试并在信号处理期间调用模块时省略时间戳信息,那就太好了。
【问题讨论】:
-
从信号处理程序进行系统调用通常是个坏主意...你确定你在这里受到保护吗?
-
是的,这就是问题所在。我想避免不安全的系统调用如果我在信号处理程序中,但如果在我不在信号处理程序中时调用代码,则它们可用。
标签: c signals signal-handling async-safe