首页 > 解决方案 > Unix:我怎么知道我是否被一个信号处理程序调用?

问题描述

假设我是一个实用程序;我可能是从信号处理程序或“正常”(可能是多线程)代码中调用的。

现在,如果我想打印一些调试消息,我应该使用 printf/fprintf,因为它们是线程友好的。

但如果我是从信号处理程序调用的,我应该调用 sprintf+write。

现在有没有办法以编程方式找到它?

注意:这个问题的动机是:How can I debug runtime library interpositioned process?

编辑:让我这样总结问题:例程想要编写调试消息,它应该使用高级IO(FILE)还是低级IO(write)?高级是线程友好的,但不能用于信号处理程序;低级则相反:可用于信号处理程序,但不是线程友好的。

标签: signalsposix

解决方案


推荐阅读