【发布时间】:2009-01-04 07:35:00
【问题描述】:
我有一个应用程序 A(来自某家 X 公司)。这个应用程序允许我通过编写自己的函数来扩展功能。
我告诉应用程序 A 在应用程序 A 的配置文件中调用我的用户函数(这是它知道应用程序 A 必须调用用户编写的函数的方式)。 appl A 使用函数指针,我必须在调用我的用户编写的函数之前向 Application A 注册。
如果我的用户编写的函数在生产中出现错误或故障,Appl A 将停止运行。例如,如果我的用户编写的函数中有分段错误。
所以应用程序 A 将从一个共享的 DLL 文件中加载我的用户编写的函数。这意味着我的用户编写的函数将在应用程序 A 的进程地址空间中运行。
我希望处理某些信号,例如分段错误、除以零和堆栈溢出,但应用程序 A 有自己为此编写的信号处理程序,
如何编写自己的信号处理程序来捕获用户编写的函数中的异常,以便可以优雅地清理而不会影响应用程序 A 的大部分内容?由于我的用户函数将在应用程序 A 的进程中调用,因此操作系统将调用在应用程序 A 中编写的信号处理程序,而不是我的用户函数。
我该如何改变呢?我希望操作系统调用在我的函数中编写的信号处理程序,但仅限于由我的函数引发的信号,这本质上是异步的。
注意:我没有应用程序 A 的源代码,我无法对其进行任何更改,因为它由不同的公司控制。
我将在 Linux、solaris 和可能的 windows 平台上使用 C,并且只使用 C。
【问题讨论】:
标签: signal-handling