如何用node.js设置脚本的最大执行时间?

我为用户提供了一种灵活的方法来使用JavaScript来转换数据,并在服务器端使用Node.js执行。 有了这个devise,有三个问题需要考虑:

我尝试了这样的:

  node -e ' setTimeout(function() { console.log("timeout"); process.exit; }, 5000); console.log("begin"); while (1); ' 

但是这个代码只显示“开始”,似乎我的超时从来没有被调用过。 任何想法 ?

       

网上收集的解决方案 "如何用node.js设置脚本的最大执行时间?"

不幸的是,如果你的用户可以启动阻塞操作(比如while(1) ),那么在一段时间之后就没有办法告诉Node退出,因为阻塞操作将阻止setTimeout处理器的触发。 要么确保用户启动的东西不会阻塞主循环,要么(这是一个非常糟糕的主意)使用某种外部自动杀/超时来销毁节点进程。

基本上,您可以使用Node来限制非阻塞代码的执行时间,但是Node的全部内容是阻塞代码阻塞了一切。 如果你的用户真的能够运行任意代码,我会考虑在更高的层次上运行你的进程pipe理器/超时杀手,例如,使用Node的exec工具产生kill超时的进程。

你可能想看tripwire( https://github.com/tjanczuk/tripwire )。 这是一个模块,可以杀死失控的节点脚本,你可以设置超时。 这是一个本地节点模块,所以这是一个需要考虑的问题,但它适用于Mac,Windows和Linux。