Acabei de passar por esse problema.
O problema de usar apenas
process.exit()
é que o programa em que estou trabalhando estava criando handles, mas nunca os destruindo. Ele estava processando um diretório e colocando dados em orientdb .
então algumas das coisas que aprendi é que as conexões de banco de dados precisam ser fechadas antes de me livrar da referência. E esse
process.exit()
não resolve todos os casos. Quando meu projeto processou 2.000 arquivos. Restariam cerca de 500 unidades, e as alças extras teriam preenchido a memória de trabalho disponível. O que significa que não poderia continuar. Portanto, nunca atingindo o
process.exit
no final. Por outro lado, se você fechar os itens que estão solicitando que o aplicativo permaneça aberto, poderá resolver o problema na origem.
As duas "Funções não documentadas" que pude usar foram
process._getActiveHandles();
process._getActiveRequests();
Não tenho certeza de quais outras funções ajudarão a depurar esses tipos de problemas, mas esses foram incríveis.
Eles retornam uma matriz e você pode determinar muito sobre o que está acontecendo em seu processo usando esses métodos.
Eu só espero que ajude alguém tropeçando neste post.