有没有办法查看哪些超时,间隔或异步操作(或无限循环)仍在运行并阻止我的进程结束?
到目前为止,我已经能够在没有这样的工具的情况下解决这个问题了,但是这样的工具非常方便,特别是当Node.JS项目开始变大时。
我正在考虑Java的kill -3
,它将堆栈跟踪打印到stderr。您可以为任何进程,任何时间,调试或否执行此操作。我想要Node.JS的等价物。 (我知道节点是单线程的异步,所以输出方式不同)
答案 0 :(得分:9)
模块why-is-node-running正是您需要的。
var log = require('why-is-node-running')
setTimeout(function () {
log() // logs out active handles that are keeping node running
}, 100)
输出类似于:
There are 4 known handle(s) keeping the process running and 0 unknown
Known handles:
# Timer
/Users/maf/dev/node_modules/why-is-node-running/example.js:6 - setInterval(function () {}, 1000)
/Users/maf/dev/node_modules/why-is-node-running/example.js:10 - createServer()
# TCP
/Users/maf/dev/node_modules/why-is-node-running/example.js:7 - server.listen(0)
/Users/maf/dev/node_modules/why-is-node-running/example.js:10 - createServer()
# TCP
/Users/maf/dev/node_modules/why-is-node-running/example.js:7 - server.listen(0)
/Users/maf/dev/node_modules/why-is-node-running/example.js:11 - createServer()
# Timer
/Users/maf/dev/node_modules/why-is-node-running/example.js:13 - setTimeout(function () {
答案 1 :(得分:6)