gpt4 book ai didi

c - 如何从 C 控制 Lua 脚本(暂停、恢复、终止)?

转载 作者:行者123 更新时间:2023-12-02 21:41:10 27 4
gpt4 key购买 nike

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

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

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

最佳答案

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

该页面有一个相当全面的 Lua 库列表及其允许沙箱使用的相对安全性。最好的建议是要小心您提供的系统功能,尤其是根据已知安全且需要的功能白名单创建沙箱环境,而不是仅仅将您知道危险的一些功能列入黑名单.

但是,即使是空的环境仍然会允许用户故意(或意外)引起问题。 while(true) end 是显而易见的情况,但即使是简单的出现情况也会引起麻烦。因此,为了避免这种麻烦,通常的建议是做你要求的事情。在单独的线程中运行用户提供的脚本,并在必要时使用外部控件来停止线程。

一种方法是在沙箱中启动用户脚本时在监视器线程中设置警报。当警报响起时,您将终止用户脚本。该技术描述为 in the mailing list 。这让我们想到了您的实际问题。

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

关于c - 如何从 C 控制 Lua 脚本(暂停、恢复、终止)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20434687/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com