Node.js:检查事件循环中剩下的是什么阻止脚本自然退出

Node.js: inspect what's left in the event loop that's preventing the script from exiting naturally

如果主事件循环中还有回调,那么node.js脚本将不会退出。虽然可以通过调用process.exit()或抛出异常强制终止脚本,但建议始终进行适当的清理,让脚本"自然"终止。但是,这有时可能很困难,因为代码中的错误可能会妨碍正确的清理,例如,当不再需要IntervalObject时,我可能会忘记删除它,这最终会阻止程序终止。

因此,是否有一种调试非终止脚本的方法来找出事件循环中剩余的注册内容?换句话说,node.js中是否有调试阻止程序退出的内容的方法?


您可以调用process._getActiveRequests()来获取活动I/O请求列表,调用process._getActiveHandles()来获取打开的句柄/文件描述符列表。


从版本8开始,node.js提供了一个方便的模块来检索此类信息。

Async_hooks:注册回调的API,用于跟踪在node.js应用程序中创建的异步资源的生存期。


wtfnode包使用了@msdex提到的工具,但以更易于开发人员使用的方式呈现。我强烈推荐这个来追踪这些烦恼。

1
2
3
4
5
const wtf = require('wtfnode');

// ...

wtf.dump();