在CFFI的帮助下,我已成功将C库与Common Lisp耦合。但是,C库使用退出代码来捕获错误,这会导致lisp程序突然终止。似乎有一个名为trivial-signal的库可以处理UNIX系统中的信号。它在Windows上也有效吗?或者是否有另一种方法来处理程序的终止?
我所想的是用一个lisp函数的回调替换退出代码,这将引发异常。这种方法会起作用吗?
提前谢谢
答案 0 :(得分:4)
拦截和取消exit()
电话没有直接的方法。即使你可以,调用exit()
的代码也不希望执行继续通过该调用,并且可能没有打扰释放内存或以其他方式清理自己。通常会抛出信号来指示进程退出,而不是通过进程本身。
如果你不能更改库,你唯一可行的选择是从子进程运行库,这样库退出不会导致你的主应用程序退出(并且主应用程序可以读取退出代码)。
编辑:根据你的评论,我建议坚持使用独立程序并调用它,而不是调用库版本(因为在任何情况下你都必须有第二个进程)。