2011-05-06 82 views
13

有没有办法看到什么超时,间隔或异步操作(或无限循环)仍在运行,并阻止我的过程结束?Node.JS:查看为什么进程仍在运行的工具?

到目前为止,我已经能够找到它,但没有这样的工具,但是这样的工具会非常方便,尤其是当Node.JS项目开始变得更大时。

我想到了Java的kill -3,它将堆栈跟踪打印到stderr。您可以对任何进程,任何时间,调试或不进行此操作。我想要一个Node.JS的等价物。 (我知道这点是单线程与异步所以它会输出不同)

+3

我有一个类似的问题,你用某种数据库的运行测试时运行到这个问题?例如,我的单元测试当我使用mongodb时,将不会因为内部mongo超时/间隔而退出。 – kcbanner 2011-05-06 19:44:31

+0

@kcbanner:在MySQL中,您必须先结束连接,然后进程才会自动退出。在MongoDB中可能是一样的吗?或者你已经尝试过吗? – 2011-05-06 20:48:51

+0

是的,结束连接修复它。 – kcbanner 2011-05-07 18:00:56

回答

5

模块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() { 
+0

太棒了!我迫不及待想测试这个! – 2016-05-16 13:25:36

+0

就是这样!谢谢! – 2017-12-13 17:54:49

相关问题