停止失控的Lua子进程

时间:2010-05-05 23:52:08

标签: c++ c multithreading lua objective-c++

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

是否会在单独的线程帮助中运行它?

3 个答案:

答案 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

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