Wie kann ich eine Liste der Rückrufe in der Knotenarbeitswarteschlange abrufen? (oder Warum wird Node nicht beendet?)


83

Auf der Node.js-Seite steht :

Der Knoten verlässt die Ereignisschleife, wenn keine Rückrufe mehr ausgeführt werden müssen.

Gibt es eine Möglichkeit herauszufinden, welche Rückrufe das Beenden von Node verhindern?


2
Dies ist eine großartige Frage ... dieselbe, die ich beim Studium der Ereignisschleife gestellt habe ... wie sehe ich die Warteschlange? Ich bin mir nicht sicher, warum die Leute dies ablehnen würden. ;)
tbarbe

Antworten:


89

Sie können process._getActiveHandles()und verwendenprocess._getActiveRequests()

Siehe diese Diskussion in der Mailingliste von node.js.

Update: Dafür gibt es ein gutes Paket - https://github.com/mafintosh/why-is-node-running


2
Vielen Dank, das habe ich gesucht. Früher in # Node.js auf Freenode hat jemand versucht, sich an diese Anrufe zu erinnern und ist nicht ganz dahin gekommen : "totally spacing on the name, it's like "process._getOpenHandles()" or something equally hard to remember". Ich googelte herum und versuchte, den eigentlichen Anruf zu finden. Danke noch einmal.
Dmitry Minkovsky

2
Ich konnte mich auch nicht an Namen erinnern - verwendete Knotenreplikation, getippter Prozess._ + Tab-Vervollständigung :)
Andrey Sidorov

Hah, ich hatte nicht daran gedacht, die automatische Vervollständigung zu REPLEN, was natürlich der beste Weg ist, dies zu tun. Ich hatte reingeschaut node_globals.jsund es nicht gefunden. Jetzt greife ich nach der Codebasis des Knotens, weiß, wonach ich suchen muss, und stelle fest, dass sie in node.cc definiert sind. process._getActiveHandles () ist src/node.cc:2345: NODE_SET_METHOD(process, "_getActiveHandles", GetActiveHandles);Hah! Ausgezeichnet.
Dmitry Minkovsky

@dimadima Es gibt momentan eine Abwertung zwischen Frage und Antwort. Erstens sind es also nicht "Menschen", sondern "eine Person". Und StackOverflow ist eine der 100 meistbesuchten Websites der Welt. Sie sollten es wirklich nicht so schwer nehmen, dass jemand irgendwo diese Frage nicht besonders mochte.
Djechlin

2
Gibt es eine offizielle Dokumentation zu diesen Funktionen?
Tbarbe

11

Es gibt ein npm-Modul wtfnode , das anzeigt , was die nodejs-App am Laufen hält, wenn Sie SIGINT (Strg-C) an sie senden.

Es wird intern verwendet, process._getActiveHandles()wie in der Antwort von @ andrey-sidrov erwähnt. Der Vorteil der Verwendung wtfnodebesteht darin, dass die Ausgabe einfach zu lesen ist.


Hat process._getActiveHandles (). Length gibt insgesamt alle Prozesse an oder nur für den Prozess, in dem er aufgerufen wird
Shantanu Madane
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.