2

我已经使用 LuaObjCBridge 将 Lua 嵌入到一个 Objective-C 应用程序中。如果需要太多时间(无限循环?),我需要知道如何停止 Lua 进程。

在单独的线程中运行它会有所帮助吗?

4

3 回答 3

6

执行此操作的常用方法是使用lua_sethook来安排每个countVM 指令的回调;当回调lua_Hook函数在过多时间后发生时,您的钩子函数可能会引发错误,强制控制受保护的调用

于 2010-05-06T02:06:07.513 回答
4

Doug 的回答已经提供了限制正常 lua 代码执行所需的默认值。如果出于安全原因需要对此进行限制,您应该知道使用 lua 库调用的已知方法(例如字符串模式匹配函数)来创建实用的无限循环。指令计数钩子不会为您捕获这些,因为在执行 c 函数调用时 lua 指令计数不会增加。对于这种口径的解决方案,您需要操作系统级别的限制(单独的进程,来自 SIGALRM 的中断?)

于 2010-05-06T08:30:58.003 回答
0

对于像 kaizer.se 提到的操作系统级别的限制,在 *nix 系统上独立运行 Lua 的一种好方法是ulimit -t 1将 Lua 进程限制为一秒的 CPU 时间。这是为Lua.org 上的现场演示提供支持的 CGI 脚本使用的方法。

对于您所描述的应用程序,使用您环境的线程设施是最佳选择。

于 2011-05-16T20:32:19.920 回答