我正在创建一些将采用任意 Groovy 代码并执行它的东西(一个 IRC 机器人)。我知道如何使用 SecurityManagers 对文件访问、线程等进行沙盒处理,但是如果脚本的 RAM 使用量超过 128 MB 或执行时间超过 3 秒(因此没有人让它运行while (true){}),我想杀死脚本。这是我的代码:
private static Object eval(String code) {
GroovyShell sh = new GroovyShell()
return sh.parse(code).run()
}
Run Code Online (Sandbox Code Playgroud)
我真的不想生成一个新的 JVM,因为我希望将异常传递给主程序并传递实际对象而不是字符串(如果我打算制作其他前端,则可以重复使用)。