首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从C语言控制Lua脚本(暂停、恢复、终止)?

如何从C语言控制Lua脚本(暂停、恢复、终止)?
EN

Stack Overflow用户
提问于 2013-12-07 06:27:31
回答 2查看 1.4K关注 0票数 2

我有一个c应用程序,它运行一些LUA脚本。Lua脚本运行一个单独的任务。

我想知道如何暂停Lua脚本并再次恢复它,我的意思是整个脚本而不仅仅是一个函数?

我还想完全终止一个正在运行的脚本。

EN

回答 2

Stack Overflow用户

发布于 2013-12-07 09:17:34

您想要的是创建一个沙箱,您还可以在其中跟踪资源利用率。Lua维基有a page on sandboxing

该页面有一个相当全面的Lua库列表,以及它们在沙箱中允许的相对安全性。最好的建议是小心您提供的系统函数,尤其是基于已知安全和需要的函数的白名单为沙箱创建环境,而不是依赖于只将几个您知道是危险的函数列入黑名单。

然而,即使是一个空的环境仍然允许用户故意(或无意地)造成问题。while(true) end是显而易见的案例,但即使是简单的出现案例也可能带来麻烦。因此,为了避免这种麻烦,通常的建议是按照你要求的那样去做。在单独的线程中运行用户提供的脚本,并在必要时使用外部控件停止线程。

要做到这一点,一种方法是在沙箱中启动用户脚本时在监视器线程中设置警报。当警报触发时,您将终止用户脚本。这种技术在in the mailing list中有描述。这就引出了你的实际问题。

您可以使用在Lua实例中设置的调试钩子定期重新获得控制权,如果设置了全局标志,则干净利落地退出线程(警报处理程序会这样做)。然而,仍然有可能使Lua代码卡在它调用的C代码中,并且调试钩子永远不会触发。要处理这种情况,您可能必须使用操作系统级别的功能来终止Lua线程,并通过一些巧妙的方法处理诸如悬空文件句柄、数据库连接或其他搁浅资源等后果。

票数 3
EN

Stack Overflow用户

发布于 2013-12-07 09:13:47

配对选项:

  1. 通过OS函数控制线程:使其休眠或挂起,或使其等待信号量或诸如此类。您可以使用操作系统的线程控制功能恢复它。当然,您也可以终止线程(终止它)。
  2. 使用标志,C将其作为全局变量推送到Lua,脚本将检查这些标志并采取相应的操作(暂停工作等)。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20434687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档