Node.JS: Инструмент, чтобы узнать, почему процесс все еще запущен?

Есть ли способ увидеть, какие тайм-ауты, интервалы или операции асинхронного (или бесконечные циклы) все еще работают и прекращают мой процесс?

Я не мог догадаться об этом до сих пор без такого инструмента, но такой инструмент будет очень удобен, особенно если проекты Node.JS здесь станут больше.

Я думаю о Java kill -3, который печатает трассировку стека на stderr. Вы можете сделать это для любого процесса, в любое время, отладки или нет. Я бы хотел получить эквивалент для Node.JS. (Я знаю, что node однопоточный с асинхронным, поэтому он будет выводиться по-разному)

Ответ 2

Модуль 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 () {