我使用LuaObjCBridge在一个Objective-C应用程序中嵌入了Lua。如果需要花费太多时间(无限循环?),我需要知道如何停止Lua进程。
是否会在单独的线程帮助中运行它?
答案 0 :(得分:6)
执行此操作的常用方法是使用lua_sethook来安排每个count
VM指令的回调;当回调lua_Hook函数在过长时间后发生时,您的钩子函数可以raise an error强制控制protected call。
答案 1 :(得分:4)
Doug的答案已经提供了限制正常lua代码执行的默认值。如果出于安全原因需要对此进行限制,则应该知道有一些已知方法可以使用lua库调用such as string pattern matching functions来创建实际的无限循环。指令计数挂钩不会为您捕获这些,因为在执行c函数调用时,lua指令计数没有递增。对于这种口径的解决方案,您需要OS级别的限制(单独的过程,来自SIGALRM的中断?)
答案 2 :(得分:0)
对于像kaizer.se这样的操作系统级限制,在* nix系统上运行Lua独立的一个好方法是使用ulimit -t 1
将Lua进程限制为CPU时间的一秒。这是为the CGI script用途提供支持的方法live demo on Lua.org。
对于您所描述的应用程序,使用您环境的线程设施是最佳选择。