停止运行失控的Lua子进程

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

将其在单独线程内运行是否有帮助?

原文链接 https://stackoverflow.com/questions/2777527

点赞
stackoverflow用户33252
stackoverflow用户33252

通常的方法是使用lua_sethook来安排在执行了count条VM指令后触发一个回调;当在过长时间后lua_Hook函数触发后,你的钩子函数可能会引发错误,强制控制转移到你的受保护的调用

2010-05-06 02:06:07
stackoverflow用户137317
stackoverflow用户137317

Doug的回答已经提供了限制普通lua代码执行所需的默认值。如果您因安全原因需要限制此功能,您应该知道已知的方法可以使用lua库调用,例如字符串模式匹配函数,创建实用的无限循环。指令计数挂钩无法捕捉它们,因为lua指令计数在执行c函数调用时不会增加。对于此类问题的解决方案,您需要OS级别的限制(单独的进程,来自SIGALRM的中断?)

2010-05-06 08:30:58
stackoverflow用户34799
stackoverflow用户34799

对于操作系统级别的限制(如kaizer.se所提到的),在*nix系统上运行 Lua 单独程序的一个好方法是使用 ulimit -t 1 限制 Lua 进程仅能使用一秒钟的 CPU 时间。这是 CGI 脚本 的方法,该脚本提供了 Lua.org上的实时演示

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

2011-05-16 20:32:19