signals - Unix:我怎么知道我是否被一个信号处理程序调用?
问题描述
假设我是一个实用程序;我可能是从信号处理程序或“正常”(可能是多线程)代码中调用的。
现在,如果我想打印一些调试消息,我应该使用 printf/fprintf,因为它们是线程友好的。
但如果我是从信号处理程序调用的,我应该调用 sprintf+write。
现在有没有办法以编程方式找到它?
注意:这个问题的动机是:How can I debug runtime library interpositioned process?
编辑:让我这样总结问题:例程想要编写调试消息,它应该使用高级IO(FILE
)还是低级IO(write
)?高级是线程友好的,但不能用于信号处理程序;低级则相反:可用于信号处理程序,但不是线程友好的。
解决方案
推荐阅读
- javascript - 获取 JSX 元素的总宽度
- c++ - 了解 OVERLAPPED 结构中的偏移量字段
- c++ - 当我运行此代码时,我得到 ld.exe||找不到 -l-lgdi32| 或 |对 `__imp_SetPixel' 的未定义引用| 如果我删除它
- php - 检查用户是否存在于数据库中的有效方法
- mysql - 运行 mysql 查询并将值导出为 2d JSON 数组
- jsoncpp - 如何在jsoncpp中删除C++中json键中的引号
- ssl - 等待 SSL 配置时 Google 负载均衡器上的服务器维护页面
- json - fluent-bit: 你能用tail来解析不是JSON的docker日志吗
- android - 我在 Kotlin 中有一个函数并试图在 Android Studio 中使用它,但它不起作用
- slack - 在 Slack Enterprise Grid 上使用应用程序/机器人邀请/删除工作区用户