Node.JS:工具,看看为什么进程仍在运行?

时间:2011-05-06 19:21:37

标签: node.js stack-trace

有没有办法查看哪些超时,间隔或异步操作(或无限循环)仍在运行并阻止我的进程结束?

到目前为止,我已经能够在没有这样的工具的情况下解决这个问题了,但是这样的工具非常方便,特别是当Node.JS项目开始变大时。

我正在考虑Java的kill -3,它将堆栈跟踪打印到stderr。您可以为任何进程,任何时间,调试或否执行此操作。我想要Node.JS的等价物。 (我知道节点是单线程的异步,所以输出方式不同)

2 个答案:

答案 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)