2011-05-06 31 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

相關問題