是否有可能强制一个节点VM上下文停止运行?

Node有一个VM模块 ,可以在新的上下文中运行任意的JavaScript代码。

我想要做的是find一种方法来阻止这个代码在callback函数上执行,而且上下文无法停止。

这里有一个棘手的例子,我一直在试图找出一个解决scheme。

'use strict'; var vm = require('vm'); var src = '(' + (function(kill) { try { kill(); } catch (ex) {} // Can this be prevented? while (true) { // Nothing. } }) + ')'; var script = new vm.Script(src); var func = script.runInNewContext(); func(function() { console.log('This should somehow stop that VM from running.'); }); 

因为try / catch语句捕获任何exception,所以抛出一个exception。 没有办法阻止脚本从callback,代码然后进入一个虚拟循环运行永远(直到它达到任何超时设置,浪费CPU周期,直到那时)。

timeout虚拟机function不是我想要的,因为我想停止脚本的命令。 我可以移动这个代码在另一个进程中运行,并杀死这个进程,但这会增加很多开销。

我愿意为这个创造性的解决scheme。 也许是使用Node的Debug对象的东西 ?

一种可能的解决scheme是在subprocess中执行代码,如果需要的话,可以尽早终止subprocess。 无论如何,如果存在无限循环的可能性,您可能会想要这样做,以避免扼杀主脚本的事件循环。