有沒有辦法看到什麼超時,間隔或異步操作(或無限循環)仍在運行,並阻止我的過程結束?Node.JS:查看爲什麼進程仍在運行的工具?
到目前爲止,我已經能夠找到它,但沒有這樣的工具,但是這樣的工具會非常方便,尤其是當Node.JS項目開始變得更大時。
我想到了Java的kill -3
,它將堆棧跟蹤打印到stderr。您可以對任何進程,任何時間,調試或不進行此操作。我想要一個Node.JS的等價物。 (我知道這點是單線程與異步所以它會輸出不同)
有沒有辦法看到什麼超時,間隔或異步操作(或無限循環)仍在運行,並阻止我的過程結束?Node.JS:查看爲什麼進程仍在運行的工具?
到目前爲止,我已經能夠找到它,但沒有這樣的工具,但是這樣的工具會非常方便,尤其是當Node.JS項目開始變得更大時。
我想到了Java的kill -3
,它將堆棧跟蹤打印到stderr。您可以對任何進程,任何時間,調試或不進行此操作。我想要一個Node.JS的等價物。 (我知道這點是單線程與異步所以它會輸出不同)
模塊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() {
太棒了!我迫不及待想測試這個! – 2016-05-16 13:25:36
就是這樣!謝謝! – 2017-12-13 17:54:49
我有一個類似的問題,你用某種數據庫的運行測試時運行到這個問題?例如,我的單元測試當我使用mongodb時,將不會因爲內部mongo超時/間隔而退出。 – kcbanner 2011-05-06 19:44:31
@kcbanner:在MySQL中,您必須先結束連接,然後進程纔會自動退出。在MongoDB中可能是一樣的嗎?或者你已經嘗試過嗎? – 2011-05-06 20:48:51
是的,結束連接修復它。 – kcbanner 2011-05-07 18:00:56