2

在 CFFI 的帮助下,我已经成功地将 C 库与 Common Lisp 结合起来。但是,C 库使用退出代码来捕获错误,这会导致 lisp 程序突然终止。似乎有一个名为 trivial-signal 的库可以处理 UNIX 系统中的信号。它也适用于Windows吗?或者也许有另一种方法来处理程序的终止?

我的想法是用 lisp 函数的回调替换退出代码,这将引发异常。这种方法会奏效吗?

先感谢您

4

1 回答 1

4

没有直接的方法来拦截和取消exit()呼叫。即使可以,调用的代码exit()也不希望执行在该调用之后继续执行,并且可能不会打扰释放内存或以其他方式自行清理。信号通常被抛出以指示进程退出,而不是进程本身。

如果您无法更改库,您唯一可行的选择是从子进程运行库,这样库退出不会导致您的主应用程序退出(并且主应用程序可以读取退出代码) .

编辑:根据您的评论,我建议坚持使用独立程序并调用它,而不是调用库化版本(因为无论如何您都必须有第二个进程)。

于 2018-01-13T12:04:34.927 回答