60513


非同期処理を多用したスクリプトで、全ての処理が完了してもプロセスが終了しないという現象が以前発生しました。当時はとりあえず一定時間を超えてプロセスが残っていたら強制終了するような仕組みで対応したのですが、最近になって「なにか非同期処理やタイマーが残っていてイベントループが終了しなかったのでは？」という仮説が浮かびあがりました。

処理が完了したところで `process.exit(0)`
を呼べば確実に終了することはできると思いますが、実装にミスがある可能性を考えると、放置していても終了しない理由が知りたいです。

Node.jsのプロセスが意図せずして動き続けている場合、どのように調査するとよいでしょうか？


CC BY-SA 4.0
2019-11-14T06:31:46.883
60509
2019-11-15T00:27:14.650
8000
question
node.js
意図せずプロセスが終了しない時の調査方法


[`process`モジュールにドキュメント化されていないAPI](https://github.com/nodejs/node/blob/1ec4154e507ba71d7aefca0a6e5c155be34e989a/lib/internal/bootstrap/node.js#L98)があります。

[code]

    process._getActiveHandles();
    process._getActiveRequests();
    
[/code]

これらを使うと、Worker queueに残っているもの（プロセスを活かし続けているもの）を確認できるかもしれません。


CC BY-SA 4.0
2019-11-14T10:53:12.223
60513
2019-11-15T00:27:14.650
2019-11-15T00:27:14.650
2238
36626
60509
answer