我正在创建一个能执行任何Groovy代码的程序(一个IRC机器人)。我知道如何通过使用SecurityManagers限制文件访问、线程等,但是我想要在脚本超出了128MB的内存使用或者执行时间超过3秒时杀死该脚本(以免有人运行while (true){}
)。这是我的代码:
private static Object eval(String code) {
GroovyShell sh = new GroovyShell()
return sh.parse(code).run()
}
我不想启动一个新的JVM,因为我希望将异常传递给主程序并传递实际对象而不是字符串(以便将来重用其他前端)。