Node.js v26.0.0 Dokumentation
- Node.js v26.0.0
- Inhaltsverzeichnis
- Process
- Prozessereignisse
process.abort()process.addUncaughtExceptionCaptureCallback(fn)process.allowedNodeEnvironmentFlagsprocess.archprocess.argvprocess.argv0process.availableMemory()process.channelprocess.chdir(directory)process.configprocess.connectedprocess.constrainedMemory()process.cpuUsage([previousValue])process.cwd()process.debugPortprocess.disconnect()process.dlopen(module, filename[, flags])process.emitWarning(warning[, options])process.emitWarning(warning[, type[, code]][, ctor])process.envprocess.execArgvprocess.execPathprocess.execve(file[, args[, env]])process.exit([code])process.exitCodeprocess.features.cached_builtinsprocess.features.debugprocess.features.inspectorprocess.features.ipv6process.features.require_moduleprocess.features.tlsprocess.features.tls_alpnprocess.features.tls_ocspprocess.features.tls_sniprocess.features.typescriptprocess.features.uvprocess.finalization.register(ref, callback)process.finalization.registerBeforeExit(ref, callback)process.finalization.unregister(ref)process.getActiveResourcesInfo()process.getBuiltinModule(id)process.getegid()process.geteuid()process.getgid()process.getgroups()process.getuid()process.hasUncaughtExceptionCaptureCallback()process.hrtime([time])process.hrtime.bigint()process.initgroups(user, extraGroup)process.kill(pid[, signal])process.loadEnvFile(path)process.mainModuleprocess.memoryUsage()process.memoryUsage.rss()process.nextTick(callback[, ...args])process.noDeprecationprocess.permissionprocess.pidprocess.platformprocess.ppidprocess.ref(maybeRefable)process.releaseprocess.reportprocess.report.compactprocess.report.directoryprocess.report.filenameprocess.report.getReport([err])process.report.reportOnFatalErrorprocess.report.reportOnSignalprocess.report.reportOnUncaughtExceptionprocess.report.excludeEnvprocess.report.signalprocess.report.writeReport([filename][, err])
process.resourceUsage()process.send(message[, sendHandle[, options]][, callback])process.setegid(id)process.seteuid(id)process.setgid(id)process.setgroups(groups)process.setuid(id)process.setSourceMapsEnabled(val)process.setUncaughtExceptionCaptureCallback(fn)process.sourceMapsEnabledprocess.stderrprocess.stdinprocess.stdoutprocess.throwDeprecationprocess.threadCpuUsage([previousValue])process.titleprocess.traceDeprecationprocess.traceProcessWarningsprocess.umask()process.umask(mask)process.unref(maybeRefable)process.uptime()process.versionprocess.versions- Exit-Codes
- Process
- Index
- Über diese Dokumentation
- Verwendung und Beispiel
- Assertion-Tests
- Asynchrone Kontextverfolgung
- Async-Hooks
- Buffer
- C++-Add-ons
- C/C++-Add-ons mit Node-API
- C++-Embedder-API
- Kindprozesse
- Cluster
- Kommandozeilenoptionen
- Konsole
- Crypto
- Debugger
- Veraltete APIs
- Diagnostics Channel
- DNS
- Domain
- Umgebungsvariablen
- Fehler
- Events
- Dateisystem
- Globale Objekte
- HTTP
- HTTP/2
- HTTPS
- Inspector
- Internationalisierung
- Module: CommonJS-Module
- Module: ECMAScript-Module
- Module:
node:module-API - Module: Pakete
- Module: TypeScript
- Net
- Iterable Streams API
- OS
- Path
- Performance-Hooks
- Berechtigungen
- Process
- Punycode
- Query-Strings
- Readline
- REPL
- Report
- Einzelne ausführbare Anwendungen
- SQLite
- Stream
- String-Decoder
- Test-Runner
- Timer
- TLS/SSL
- Trace-Events
- TTY
- UDP/Datagramm
- URL
- Utilities
- V8
- VM
- WASI
- Web Crypto API
- Web Streams API
- Worker-Threads
- Zlib
- Zlib Iterable Compression
- Andere Versionen
- Optionen
Prozess#
Das process-Objekt bietet Informationen über und Steuerungsmöglichkeiten für den aktuellen Node.js-Prozess.
import process from 'node:process';const process = require('node:process');
Prozessereignisse#
Das process-Objekt ist eine Instanz von EventEmitter.
Ereignis: 'beforeExit'#
Das 'beforeExit'-Ereignis wird ausgelöst, wenn Node.js seine Event-Loop leert und keine weiteren Arbeiten mehr einzuplanen sind. Normalerweise wird der Node.js-Prozess beendet, wenn keine Arbeit mehr ansteht, aber ein beim 'beforeExit'-Ereignis registrierter Listener kann asynchrone Aufrufe tätigen und somit den Node.js-Prozess dazu veranlassen, fortzufahren.
Die Listener-Callback-Funktion wird mit dem Wert von process.exitCode als einzigem Argument aufgerufen.
Das 'beforeExit'-Ereignis wird nicht bei Bedingungen ausgelöst, die eine explizite Beendigung verursachen, wie etwa der Aufruf von process.exit() oder nicht abgefangene Exceptions.
'beforeExit' sollte nicht als Alternative zum 'exit'-Ereignis verwendet werden, es sei denn, es ist beabsichtigt, weitere Arbeiten einzuplanen.
import process from 'node:process'; process.on('beforeExit', (code) => { console.log('Process beforeExit event with code: ', code); }); process.on('exit', (code) => { console.log('Process exit event with code: ', code); }); console.log('This message is displayed first.'); // Prints: // This message is displayed first. // Process beforeExit event with code: 0 // Process exit event with code: 0const process = require('node:process'); process.on('beforeExit', (code) => { console.log('Process beforeExit event with code: ', code); }); process.on('exit', (code) => { console.log('Process exit event with code: ', code); }); console.log('This message is displayed first.'); // Prints: // This message is displayed first. // Process beforeExit event with code: 0 // Process exit event with code: 0
Ereignis: 'disconnect'#
Wenn der Node.js-Prozess mit einem IPC-Kanal gestartet wurde (siehe die Dokumentation zu Child Process und Cluster), wird das 'disconnect'-Ereignis ausgelöst, wenn der IPC-Kanal geschlossen wird.
Ereignis: 'exit'#
code<integer>
Das 'exit'-Ereignis wird ausgelöst, wenn der Node.js-Prozess kurz vor der Beendigung steht, als Ergebnis von:
- Der expliziten Methode
process.exit(); - Der Node.js Event-Loop, die keine weiteren Aufgaben zu erledigen hat.
Es gibt keine Möglichkeit, das Beenden der Event-Loop an diesem Punkt zu verhindern, und sobald alle 'exit'-Listener ausgeführt wurden, wird der Node.js-Prozess beendet.
Die Listener-Callback-Funktion wird mit dem Exit-Code aufgerufen, der entweder durch die Eigenschaft process.exitCode oder durch das an die Methode process.exit() übergebene exitCode-Argument festgelegt wurde.
import process from 'node:process'; process.on('exit', (code) => { console.log(`About to exit with code: ${code}`); });const process = require('node:process'); process.on('exit', (code) => { console.log(`About to exit with code: ${code}`); });
Listener-Funktionen müssen ausschließlich synchrone Operationen durchführen. Der Node.js-Prozess wird sofort nach dem Aufruf der 'exit'-Event-Listener beendet, wodurch alle weiteren in der Event-Loop wartenden Arbeiten verworfen werden. Im folgenden Beispiel wird beispielsweise der Timeout niemals eintreten:
import process from 'node:process'; process.on('exit', (code) => { setTimeout(() => { console.log('This will not run'); }, 0); });const process = require('node:process'); process.on('exit', (code) => { setTimeout(() => { console.log('This will not run'); }, 0); });
Ereignis: 'message'#
message<Object>|<boolean>|<number>|<string>|<null>ein geparstes JSON-Objekt oder ein serialisierbarer primitiver Wert.sendHandle<net.Server>|<net.Socket>einnet.Server- odernet.Socket-Objekt oder undefined.
Wenn der Node.js-Prozess mit einem IPC-Kanal gestartet wurde, wird das 'message'-Ereignis jedes Mal ausgelöst, wenn eine Nachricht, die von einem Elternprozess mittels childprocess.send() gesendet wurde, vom Kindprozess empfangen wird.
Die Nachricht durchläuft Serialisierung und Parsing. Die resultierende Nachricht ist möglicherweise nicht identisch mit der ursprünglich gesendeten.
Wenn beim Starten des Prozesses die Option serialization auf advanced gesetzt wurde, kann das message-Argument Daten enthalten, die JSON nicht darstellen kann. Siehe Erweiterte Serialisierung für child_process für weitere Details.
Ereignis: 'rejectionHandled'#
promise<Promise>Die verspätet behandelte Promise.
Das 'rejectionHandled'-Ereignis wird ausgelöst, wenn eine Promise abgelehnt wurde und ein Fehler-Handler an sie angehängt wurde (z. B. mittels promise.catch()), später als einen Durchlauf der Node.js Event-Loop.
Das Promise-Objekt wäre zuvor in einem 'unhandledRejection'-Ereignis ausgegeben worden, erhielt jedoch während der Verarbeitung einen Ablehnungs-Handler.
Es gibt kein Konzept einer "obersten Ebene" für eine Promise-Kette, bei der Ablehnungen immer behandelt werden können. Da eine Promise-Ablehnung inhärent asynchron ist, kann sie zu einem späteren Zeitpunkt behandelt werden, möglicherweise viel später als der Event-Loop-Durchlauf, in dem das 'unhandledRejection'-Ereignis ausgelöst wurde.
Anders ausgedrückt: Im Gegensatz zu synchronem Code, bei dem es eine ständig wachsende Liste nicht abgefangener Ausnahmen gibt, kann es bei Promises eine Liste von nicht behandelten Ablehnungen geben, die wächst und schrumpft.
In synchronem Code wird das 'uncaughtException'-Ereignis ausgelöst, wenn die Liste der nicht abgefangenen Ausnahmen wächst.
In asynchronem Code wird das 'unhandledRejection'-Ereignis ausgelöst, wenn die Liste der nicht behandelten Ablehnungen wächst, und 'rejectionHandled', wenn diese Liste schrumpft.
import process from 'node:process'; const unhandledRejections = new Map(); process.on('unhandledRejection', (reason, promise) => { unhandledRejections.set(promise, reason); }); process.on('rejectionHandled', (promise) => { unhandledRejections.delete(promise); });const process = require('node:process'); const unhandledRejections = new Map(); process.on('unhandledRejection', (reason, promise) => { unhandledRejections.set(promise, reason); }); process.on('rejectionHandled', (promise) => { unhandledRejections.delete(promise); });
In diesem Beispiel wächst und schrumpft die unhandledRejections-Map im Laufe der Zeit und spiegelt Ablehnungen wider, die zuerst unbehandelt bleiben und dann behandelt werden. Es ist möglich, solche Fehler in einem Fehlerprotokoll zu speichern, entweder periodisch (was für langlebige Anwendungen wahrscheinlich am besten ist) oder beim Prozessende (was für Skripte wahrscheinlich am bequemsten ist).
Ereignis: 'workerMessage'#
value<any>Ein Wert, der mittelspostMessageToThread()übertragen wurde.source<number>Die ID des übertragenden Worker-Threads oder0für den Hauptthread.
Das 'workerMessage'-Ereignis wird für jede eingehende Nachricht ausgelöst, die von der anderen Partei mittels postMessageToThread() gesendet wurde.
Ereignis: 'uncaughtException'#
err<Error>Die nicht abgefangene Ausnahme.origin<string>Gibt an, ob die Ausnahme von einer unbehandelten Ablehnung (Rejection) oder einem synchronen Fehler stammt. Kann entweder'uncaughtException'oder'unhandledRejection'sein. Letzteres wird verwendet, wenn eine Ausnahme in einemPromise-basierten asynchronen Kontext auftritt (oder einePromiseabgelehnt wird) und das Flag--unhandled-rejectionsaufstrictoderthrow(Standardwert) gesetzt ist und die Ablehnung nicht behandelt wird, oder wenn eine Ablehnung während der statischen Ladephase von ES-Modulen am Kommandozeilen-Einstiegspunkt erfolgt.
Das 'uncaughtException'-Ereignis wird ausgelöst, wenn eine nicht abgefangene JavaScript-Ausnahme bis zur Event-Loop zurückkehrt. Standardmäßig behandelt Node.js solche Ausnahmen, indem es den Stack-Trace an stderr ausgibt und mit Code 1 beendet, wodurch ein zuvor gesetztes process.exitCode überschrieben wird. Das Hinzufügen eines Handlers für das 'uncaughtException'-Ereignis überschreibt dieses Standardverhalten. Alternativ kann das process.exitCode im 'uncaughtException'-Handler geändert werden, was dazu führt, dass der Prozess mit dem angegebenen Exit-Code beendet wird. Andernfalls wird der Prozess bei Vorhandensein eines solchen Handlers mit 0 beendet.
import process from 'node:process'; import fs from 'node:fs'; process.on('uncaughtException', (err, origin) => { fs.writeSync( process.stderr.fd, `Caught exception: ${err}\n` + `Exception origin: ${origin}\n`, ); }); setTimeout(() => { console.log('This will still run.'); }, 500); // Intentionally cause an exception, but don't catch it. nonexistentFunc(); console.log('This will not run.');const process = require('node:process'); const fs = require('node:fs'); process.on('uncaughtException', (err, origin) => { fs.writeSync( process.stderr.fd, `Caught exception: ${err}\n` + `Exception origin: ${origin}\n`, ); }); setTimeout(() => { console.log('This will still run.'); }, 500); // Intentionally cause an exception, but don't catch it. nonexistentFunc(); console.log('This will not run.');
Es ist möglich, 'uncaughtException'-Ereignisse zu überwachen, ohne das Standardverhalten des Prozessabbruchs zu überschreiben, indem ein 'uncaughtExceptionMonitor'-Listener installiert wird.
Warnung: Korrekte Verwendung von 'uncaughtException'#
'uncaughtException' ist ein grober Mechanismus zur Ausnahmebehandlung, der nur als letztes Mittel verwendet werden sollte. Das Ereignis sollte nicht als Äquivalent zu On Error Resume Next verwendet werden. Nicht abgefangene Ausnahmen bedeuten inhärent, dass sich eine Anwendung in einem undefinierten Zustand befindet. Der Versuch, Anwendungscode fortzusetzen, ohne sich ordnungsgemäß von der Ausnahme zu erholen, kann zu weiteren unvorhergesehenen und unvorhersehbaren Problemen führen.
Ausnahmen, die innerhalb des Event-Handlers geworfen werden, werden nicht abgefangen. Stattdessen wird der Prozess mit einem Exit-Code ungleich Null beendet und der Stack-Trace ausgegeben. Dies dient dazu, unendliche Rekursionen zu vermeiden.
Der Versuch, nach einer nicht abgefangenen Ausnahme normal fortzufahren, kann mit dem Ziehen des Netzsteckers beim Upgrade eines Computers verglichen werden. Neun von zehn Malen passiert nichts. Aber beim zehnten Mal ist das System beschädigt.
Die korrekte Verwendung von 'uncaughtException' besteht darin, vor dem Herunterfahren des Prozesses eine synchrone Bereinigung zugewiesener Ressourcen (z. B. Datei-Deskriptoren, Handles usw.) durchzuführen. Es ist nicht sicher, den normalen Betrieb nach einer 'uncaughtException' fortzusetzen.
Um eine abgestürzte Anwendung zuverlässiger neu zu starten, unabhängig davon, ob 'uncaughtException' ausgelöst wird oder nicht, sollte ein externer Monitor in einem separaten Prozess eingesetzt werden, um Anwendungsfehler zu erkennen und bei Bedarf wiederherzustellen oder neu zu starten.
Ereignis: 'uncaughtExceptionMonitor'#
err<Error>Die nicht abgefangene Ausnahme.origin<string>Gibt an, ob die Ausnahme von einer unbehandelten Ablehnung oder synchronen Fehlern stammt. Kann entweder'uncaughtException'oder'unhandledRejection'sein.
Das 'uncaughtExceptionMonitor'-Ereignis wird ausgelöst, bevor ein 'uncaughtException'-Ereignis ausgelöst wird oder ein über process.setUncaughtExceptionCaptureCallback() installierter Hook aufgerufen wird.
Das Installieren eines 'uncaughtExceptionMonitor'-Listeners ändert nicht das Verhalten, sobald ein 'uncaughtException'-Ereignis ausgelöst wird. Der Prozess wird weiterhin abstürzen, wenn kein 'uncaughtException'-Listener installiert ist.
import process from 'node:process'; process.on('uncaughtExceptionMonitor', (err, origin) => { MyMonitoringTool.logSync(err, origin); }); // Intentionally cause an exception, but don't catch it. nonexistentFunc(); // Still crashes Node.jsconst process = require('node:process'); process.on('uncaughtExceptionMonitor', (err, origin) => { MyMonitoringTool.logSync(err, origin); }); // Intentionally cause an exception, but don't catch it. nonexistentFunc(); // Still crashes Node.js
Ereignis: 'unhandledRejection'#
reason<Error>|<any>Das Objekt, mit dem die Promise abgelehnt wurde (typischerweise einError-Objekt).promise<Promise>Die abgelehnte Promise.
Das 'unhandledRejection'-Ereignis wird ausgelöst, wenn eine Promise abgelehnt wird und kein Fehler-Handler innerhalb eines Durchlaufs der Event-Loop an die Promise angehängt wird. Beim Programmieren mit Promises werden Ausnahmen als "abgelehnte Promises" gekapselt. Ablehnungen können mittels promise.catch() abgefangen und behandelt werden und werden durch eine Promise-Kette weitergegeben. Das 'unhandledRejection'-Ereignis ist nützlich, um abgelehnte Promises zu erkennen und nachzuverfolgen, deren Ablehnungen noch nicht behandelt wurden.
import process from 'node:process'; process.on('unhandledRejection', (reason, promise) => { console.log('Unhandled Rejection at:', promise, 'reason:', reason); // Application specific logging, throwing an error, or other logic here }); somePromise.then((res) => { return reportToUser(JSON.pasre(res)); // Note the typo (`pasre`) }); // No `.catch()` or `.then()`const process = require('node:process'); process.on('unhandledRejection', (reason, promise) => { console.log('Unhandled Rejection at:', promise, 'reason:', reason); // Application specific logging, throwing an error, or other logic here }); somePromise.then((res) => { return reportToUser(JSON.pasre(res)); // Note the typo (`pasre`) }); // No `.catch()` or `.then()`
Das Folgende löst ebenfalls das 'unhandledRejection'-Ereignis aus:
import process from 'node:process'; function SomeResource() { // Initially set the loaded status to a rejected promise this.loaded = Promise.reject(new Error('Resource not yet loaded!')); } const resource = new SomeResource(); // no .catch or .then on resource.loaded for at least a turnconst process = require('node:process'); function SomeResource() { // Initially set the loaded status to a rejected promise this.loaded = Promise.reject(new Error('Resource not yet loaded!')); } const resource = new SomeResource(); // no .catch or .then on resource.loaded for at least a turn
In diesem Beispielfall ist es möglich, die Ablehnung als Entwicklerfehler zu verfolgen, wie dies typischerweise bei anderen 'unhandledRejection'-Ereignissen der Fall wäre. Um solche Fehler zu beheben, kann ein nicht-funktionaler .catch(() => { })-Handler an resource.loaded angehängt werden, was verhindern würde, dass das 'unhandledRejection'-Ereignis ausgelöst wird.
Wenn ein 'unhandledRejection'-Ereignis ausgelöst, aber nicht behandelt wird, wird es als eine nicht abgefangene Ausnahme gemeldet. Dies kann neben anderen Verhaltensweisen von 'unhandledRejection'-Ereignissen über das Flag --unhandled-rejections geändert werden.
Ereignis: 'warning'#
warning<Error>Wichtige Eigenschaften der Warnung sind
Das 'warning'-Ereignis wird ausgelöst, wenn Node.js eine Prozesswarnung ausgibt.
Eine Prozesswarnung ähnelt einem Fehler, da sie außergewöhnliche Bedingungen beschreibt, auf die der Benutzer aufmerksam gemacht werden soll. Warnungen sind jedoch nicht Teil des normalen Fehlerbehandlungsflusses von Node.js und JavaScript. Node.js kann Warnungen ausgeben, wenn es schlechte Codierungspraktiken erkennt, die zu suboptimaler Anwendungsleistung, Bugs oder Sicherheitslücken führen könnten.
import process from 'node:process'; process.on('warning', (warning) => { console.warn(warning.name); // Print the warning name console.warn(warning.message); // Print the warning message console.warn(warning.stack); // Print the stack trace });const process = require('node:process'); process.on('warning', (warning) => { console.warn(warning.name); // Print the warning name console.warn(warning.message); // Print the warning message console.warn(warning.stack); // Print the stack trace });
Standardmäßig gibt Node.js Prozesswarnungen an stderr aus. Die Kommandozeilenoption --no-warnings kann verwendet werden, um die Standardkonsolenausgabe zu unterdrücken, aber das 'warning'-Ereignis wird weiterhin vom process-Objekt ausgelöst. Derzeit ist es nicht möglich, andere Warnungstypen außer Deprecation-Warnungen zu unterdrücken. Um Deprecation-Warnungen zu unterdrücken, schauen Sie sich das Flag --no-deprecation an.
Das folgende Beispiel illustriert die Warnung, die an stderr ausgegeben wird, wenn zu viele Listener für ein Ereignis hinzugefügt wurden:
$ node
> events.defaultMaxListeners = 1;
> process.on('foo', () => {});
> process.on('foo', () => {});
> (node:38638) MaxListenersExceededWarning: Possible EventEmitter memory leak
detected. 2 foo listeners added. Use emitter.setMaxListeners() to increase limit
Im Gegensatz dazu schaltet das folgende Beispiel die Standard-Warnungsausgabe aus und fügt einen benutzerdefinierten Handler zum 'warning'-Ereignis hinzu:
$ node --no-warnings
> const p = process.on('warning', (warning) => console.warn('Do not do that!'));
> events.defaultMaxListeners = 1;
> process.on('foo', () => {});
> process.on('foo', () => {});
> Do not do that!
Die Kommandozeilenoption --trace-warnings kann verwendet werden, damit die Standardkonsolenausgabe für Warnungen den vollständigen Stack-Trace der Warnung enthält.
Das Starten von Node.js mit dem Kommandozeilenflag --throw-deprecation führt dazu, dass benutzerdefinierte Deprecation-Warnungen als Ausnahmen geworfen werden.
Die Verwendung des Kommandozeilenflags --trace-deprecation bewirkt, dass die benutzerdefinierte Deprecation zusammen mit dem Stack-Trace an stderr ausgegeben wird.
Die Verwendung des Kommandozeilenflags --no-deprecation unterdrückt jegliche Berichterstattung über die benutzerdefinierte Deprecation.
Die *-deprecation-Kommandozeilenflags betreffen nur Warnungen, die den Namen 'DeprecationWarning' verwenden.
Auslösen benutzerdefinierter Warnungen#
Siehe die Methode process.emitWarning() zum Ausgeben von benutzerdefinierten oder anwendungsspezifischen Warnungen.
Node.js Warnungsnamen#
Es gibt keine strengen Richtlinien für Warnungstypen (identifiziert durch die name-Eigenschaft), die von Node.js ausgegeben werden. Neue Warnungstypen können jederzeit hinzugefügt werden. Einige der häufigsten Warnungstypen sind:
'DeprecationWarning'- Zeigt die Verwendung einer veralteten (deprecated) Node.js-API oder eines Features an. Solche Warnungen müssen eine'code'-Eigenschaft enthalten, die den Deprecation-Code identifiziert.'ExperimentalWarning'- Zeigt die Verwendung einer experimentellen Node.js-API oder eines Features an. Solche Features sollten mit Vorsicht verwendet werden, da sie sich jederzeit ändern können und nicht denselben strengen Richtlinien zur semantischen Versionierung und langfristigen Unterstützung (LTS) wie unterstützte Features unterliegen.'MaxListenersExceededWarning'- Zeigt an, dass zu viele Listener für ein gegebenes Ereignis bei einemEventEmitteroderEventTargetregistriert wurden. Dies ist oft ein Hinweis auf ein Speicherleck.'TimeoutOverflowWarning'- Zeigt an, dass ein numerischer Wert, der nicht in einen vorzeichenbehafteten 32-Bit-Integer passt, an die FunktionensetTimeout()odersetInterval()übergeben wurde.'TimeoutNegativeWarning'- Zeigt an, dass eine negative Zahl ansetTimeout()odersetInterval()übergeben wurde.'TimeoutNaNWarning'- Zeigt an, dass ein Wert, der keine Zahl ist, ansetTimeout()odersetInterval()übergeben wurde.'UnsupportedWarning'- Zeigt die Verwendung einer nicht unterstützten Option oder eines Features an, die/das ignoriert wird, anstatt als Fehler behandelt zu werden. Ein Beispiel ist die Verwendung der HTTP-Antwortstatusmeldung bei Nutzung der HTTP/2-Kompatibilitäts-API.
Ereignis: 'worker'#
Das 'worker'-Ereignis wird ausgelöst, nachdem ein neuer <Worker>-Thread erstellt wurde.
Signalereignisse#
Signalereignisse werden ausgelöst, wenn der Node.js-Prozess ein Signal empfängt. Bitte beachten Sie signal(7) für eine Auflistung von Standard-POSIX-Signalnamen wie 'SIGINT', 'SIGHUP' usw.
Signale sind in Worker-Threads nicht verfügbar.
Der Signal-Handler empfängt den Namen des Signals ('SIGINT', 'SIGTERM' usw.) als erstes Argument.
Der Name jedes Ereignisses ist der allgemeine Name des Signals in Großbuchstaben (z. B. 'SIGINT' für SIGINT-Signale).
import process from 'node:process'; // Begin reading from stdin so the process does not exit. process.stdin.resume(); process.on('SIGINT', () => { console.log('Received SIGINT. Press Control-D to exit.'); }); // Using a single function to handle multiple signals function handle(signal) { console.log(`Received ${signal}`); } process.on('SIGINT', handle); process.on('SIGTERM', handle);const process = require('node:process'); // Begin reading from stdin so the process does not exit. process.stdin.resume(); process.on('SIGINT', () => { console.log('Received SIGINT. Press Control-D to exit.'); }); // Using a single function to handle multiple signals function handle(signal) { console.log(`Received ${signal}`); } process.on('SIGINT', handle); process.on('SIGTERM', handle);
'SIGUSR1'ist für Node.js reserviert, um den Debugger zu starten. Es ist möglich, einen Listener zu installieren, aber dies könnte den Debugger stören.'SIGTERM'und'SIGINT'haben auf Nicht-Windows-Plattformen Standard-Handler, die den Terminalmodus zurücksetzen, bevor sie mit dem Code128 + Signalnummerbeendet werden. Wenn für eines dieser Signale ein Listener installiert ist, wird dessen Standardverhalten entfernt (Node.js wird nicht mehr automatisch beendet).'SIGPIPE'wird standardmäßig ignoriert. Es kann ein Listener installiert werden.'SIGHUP'wird unter Windows generiert, wenn das Konsolenfenster geschlossen wird, und auf anderen Plattformen unter verschiedenen ähnlichen Bedingungen. Siehesignal(7). Es kann ein Listener installiert werden, jedoch wird Node.js unter Windows etwa 10 Sekunden später bedingungslos beendet. Auf Nicht-Windows-Plattformen besteht das Standardverhalten vonSIGHUPdarin, Node.js zu beenden, aber sobald ein Listener installiert wurde, wird dieses Standardverhalten entfernt.'SIGTERM'wird unter Windows nicht unterstützt, es kann jedoch darauf gewartet werden.'SIGINT'vom Terminal wird auf allen Plattformen unterstützt und kann normalerweise mit Strg+C generiert werden (obwohl dies konfigurierbar sein kann). Es wird nicht generiert, wenn der Terminal-Rohmodus aktiviert ist und Strg+C verwendet wird.'SIGBREAK'wird unter Windows geliefert, wenn Strg+Pause gedrückt wird. Auf Nicht-Windows-Plattformen kann darauf gewartet werden, aber es gibt keine Möglichkeit, es zu senden oder zu generieren.'SIGWINCH'wird geliefert, wenn die Größe der Konsole geändert wurde. Unter Windows passiert dies nur beim Schreiben in die Konsole, wenn der Cursor bewegt wird oder wenn ein lesbares TTY im Rohmodus verwendet wird.'SIGKILL'kann keinen Listener installiert bekommen; es beendet Node.js auf allen Plattformen bedingungslos.'SIGSTOP'kann keinen Listener installiert bekommen.'SIGBUS','SIGFPE','SIGSEGV'und'SIGILL'lassen, wenn sie nicht künstlich mittelskill(2)ausgelöst wurden, den Prozess inhärent in einem Zustand zurück, aus dem es nicht sicher ist, JS-Listener aufzurufen. Dies könnte dazu führen, dass der Prozess nicht mehr reagiert.0kann gesendet werden, um die Existenz eines Prozesses zu testen; es hat keine Auswirkungen, wenn der Prozess existiert, wirft aber einen Fehler, wenn der Prozess nicht existiert.
Windows unterstützt keine Signale und hat daher kein Äquivalent zur Beendigung durch Signal, aber Node.js bietet einige Emulationen mit process.kill() und subprocess.kill().
- Das Senden von
SIGINT,SIGTERMundSIGKILLführt zur bedingungslosen Beendigung des Zielprozesses, und danach wird der Subprozess melden, dass der Prozess durch ein Signal beendet wurde. - Das Senden des Signals
0kann als plattformunabhängige Methode zum Testen auf die Existenz eines Prozesses verwendet werden.
process.abort()#
Die process.abort()-Methode veranlasst den Node.js-Prozess, sofort zu beenden und eine Core-Datei zu generieren.
Dieses Feature ist in Worker-Threads nicht verfügbar.
process.addUncaughtExceptionCaptureCallback(fn)#
Stabilität: 1 - Experimentell
fn<Function>
Die process.addUncaughtExceptionCaptureCallback()-Funktion fügt einen Callback hinzu, der aufgerufen wird, wenn eine nicht abgefangene Ausnahme auftritt, wobei der Ausnahme-Wert als erstes Argument empfangen wird.
Im Gegensatz zu process.setUncaughtExceptionCaptureCallback() ermöglicht diese Funktion das Registrieren mehrerer Callbacks und steht nicht im Konflikt mit dem domain-Modul. Callbacks werden in umgekehrter Reihenfolge der Registrierung aufgerufen (zuletzt registrierte zuerst). Wenn ein Callback true zurückgibt, werden nachfolgende Callbacks und die Standard-Behandlung nicht abgefangener Ausnahmen übersprungen.
import process from 'node:process'; process.addUncaughtExceptionCaptureCallback((err) => { console.error('Caught exception:', err.message); return true; // Indicates exception was handled });const process = require('node:process'); process.addUncaughtExceptionCaptureCallback((err) => { console.error('Caught exception:', err.message); return true; // Indicates exception was handled });
process.allowedNodeEnvironmentFlags#
- Typ:
<Set>
Die process.allowedNodeEnvironmentFlags-Eigenschaft ist ein spezielles, schreibgeschütztes Set von Flags, die innerhalb der Umgebungsvariable NODE_OPTIONS zulässig sind.
process.allowedNodeEnvironmentFlags erweitert Set, überschreibt jedoch Set.prototype.has, um verschiedene mögliche Flag-Repräsentationen zu erkennen. process.allowedNodeEnvironmentFlags.has() gibt true in den folgenden Fällen zurück:
- Flags können führende einfache (
-) oder doppelte (--) Bindestriche auslassen; z. B.inspect-brkfür--inspect-brkoderrfür-r. - Flags, die an V8 weitergegeben werden (wie in
--v8-optionsaufgelistet), können einen oder mehrere nicht-führende Bindestriche durch einen Unterstrich ersetzen oder umgekehrt; z. B.--perf_basic_prof,--perf-basic-prof,--perf_basic-profusw. - Flags können ein oder mehrere Gleichheitszeichen (
=) enthalten; alle Zeichen nach und einschließlich des ersten Gleichheitszeichens werden ignoriert; z. B.--stack-trace-limit=100. - Flags müssen innerhalb von
NODE_OPTIONSzulässig sein.
Beim Iterieren über process.allowedNodeEnvironmentFlags erscheinen Flags nur einmal; jedes beginnt mit einem oder mehreren Bindestrichen. An V8 weitergegebene Flags enthalten Unterstriche anstelle von nicht-führenden Bindestrichen.
import { allowedNodeEnvironmentFlags } from 'node:process'; allowedNodeEnvironmentFlags.forEach((flag) => { // -r // --inspect-brk // --abort_on_uncaught_exception // ... });const { allowedNodeEnvironmentFlags } = require('node:process'); allowedNodeEnvironmentFlags.forEach((flag) => { // -r // --inspect-brk // --abort_on_uncaught_exception // ... });
Die Methoden add(), clear() und delete() von process.allowedNodeEnvironmentFlags bewirken nichts und schlagen stillschweigend fehl.
Wenn Node.js ohne NODE_OPTIONS-Unterstützung kompiliert wurde (angezeigt in process.config), enthält process.allowedNodeEnvironmentFlags das, was zulässig gewesen wäre.
process.arch#
- Typ:
<string>
Die CPU-Architektur des Betriebssystems, für die das Node.js-Binärprogramm kompiliert wurde. Mögliche Werte sind: 'arm', 'arm64', 'ia32', 'loong64', 'mips', 'mipsel', 'ppc64', 'riscv64', 's390', 's390x' und 'x64'.
import { arch } from 'node:process'; console.log(`This processor architecture is ${arch}`);const { arch } = require('node:process'); console.log(`This processor architecture is ${arch}`);
process.argv#
- Typ:
<string[]>
Die process.argv-Eigenschaft gibt ein Array mit den Kommandozeilenargumenten zurück, die beim Start des Node.js-Prozesses übergeben wurden. Das erste Element ist process.execPath. Siehe process.argv0, wenn der Zugriff auf den ursprünglichen Wert von argv[0] benötigt wird. Wenn ein Programm-Einstiegspunkt bereitgestellt wurde, ist das zweite Element der absolute Pfad dazu. Die verbleibenden Elemente sind zusätzliche Kommandozeilenargumente.
Zum Beispiel, unter der Annahme des folgenden Skripts für process-args.js:
import { argv } from 'node:process'; // print process.argv argv.forEach((val, index) => { console.log(`${index}: ${val}`); });const { argv } = require('node:process'); // print process.argv argv.forEach((val, index) => { console.log(`${index}: ${val}`); });
Der Aufruf des Node.js-Prozesses als:
node process-args.js one two=three four
Würde die Ausgabe erzeugen:
0: /usr/local/bin/node
1: /Users/mjr/work/node/process-args.js
2: one
3: two=three
4: four
process.argv0#
- Typ:
<string>
Die process.argv0-Eigenschaft speichert eine schreibgeschützte Kopie des ursprünglichen Werts von argv[0], der beim Start von Node.js übergeben wurde.
$ bash -c 'exec -a customArgv0 ./node'
> process.argv[0]
'/Volumes/code/external/node/out/Release/node'
> process.argv0
'customArgv0'
process.availableMemory()#
- Gibt zurück:
<number>
Ermittelt die Menge an freiem Speicher, die dem Prozess noch zur Verfügung steht (in Bytes).
Siehe uv_get_available_memory für weitere Informationen.
process.channel#
- Typ:
<Object>
Wenn der Node.js-Prozess mit einem IPC-Kanal gestartet wurde (siehe die Dokumentation zu Child Process), ist die process.channel-Eigenschaft eine Referenz auf den IPC-Kanal. Wenn kein IPC-Kanal existiert, ist diese Eigenschaft undefined.
process.channel.ref()#
Diese Methode veranlasst den IPC-Kanal dazu, die Event-Loop des Prozesses am Laufen zu halten, falls zuvor .unref() aufgerufen wurde.
Dies wird typischerweise über die Anzahl der 'disconnect'- und 'message'-Listener am process-Objekt verwaltet. Diese Methode kann jedoch verwendet werden, um explizit ein bestimmtes Verhalten anzufordern.
process.channel.unref()#
Diese Methode bewirkt, dass der IPC-Kanal die Event-Loop des Prozesses nicht am Laufen hält und ermöglicht es ihr, auch bei offenem Kanal zu beenden.
Dies wird typischerweise über die Anzahl der 'disconnect'- und 'message'-Listener am process-Objekt verwaltet. Diese Methode kann jedoch verwendet werden, um explizit ein bestimmtes Verhalten anzufordern.
process.chdir(directory)#
directory<string>
Die process.chdir()-Methode ändert das aktuelle Arbeitsverzeichnis des Node.js-Prozesses oder wirft eine Ausnahme, falls dies fehlschlägt (z. B. wenn das angegebene directory nicht existiert).
import { chdir, cwd } from 'node:process'; console.log(`Starting directory: ${cwd()}`); try { chdir('/tmp'); console.log(`New directory: ${cwd()}`); } catch (err) { console.error(`chdir: ${err}`); }const { chdir, cwd } = require('node:process'); console.log(`Starting directory: ${cwd()}`); try { chdir('/tmp'); console.log(`New directory: ${cwd()}`); } catch (err) { console.error(`chdir: ${err}`); }
Dieses Feature ist in Worker-Threads nicht verfügbar.
process.config#
- Typ:
<Object>
Die process.config-Eigenschaft gibt ein eingefrorenes Object zurück, das die JavaScript-Repräsentation der Konfigurationsoptionen enthält, die zum Kompilieren der aktuellen Node.js-Ausführungsdatei verwendet wurden. Dies entspricht der Datei config.gypi, die beim Ausführen des ./configure-Skripts erstellt wurde.
Ein Beispiel für die mögliche Ausgabe sieht so aus:
{
target_defaults:
{ cflags: [],
default_configuration: 'Release',
defines: [],
include_dirs: [],
libraries: [] },
variables:
{
host_arch: 'x64',
napi_build_version: 5,
node_install_npm: 'true',
node_prefix: '',
node_shared_cares: 'false',
node_shared_http_parser: 'false',
node_shared_libuv: 'false',
node_shared_zlib: 'false',
node_use_openssl: 'true',
node_shared_openssl: 'false',
target_arch: 'x64',
v8_use_snapshot: 1
}
}
process.connected#
- Typ:
<boolean>
Wenn der Node.js-Prozess mit einem IPC-Kanal gestartet wurde (siehe die Dokumentation zu Child Process und Cluster), gibt die process.connected-Eigenschaft true zurück, solange der IPC-Kanal verbunden ist, und false, nachdem process.disconnect() aufgerufen wurde.
Sobald process.connected false ist, ist es nicht mehr möglich, Nachrichten über den IPC-Kanal mittels process.send() zu senden.
process.constrainedMemory()#
- Gibt zurück:
<number>
Ermittelt die dem Prozess zur Verfügung stehende Speichermenge (in Bytes) basierend auf den vom Betriebssystem auferlegten Beschränkungen. Wenn keine solche Beschränkung existiert oder die Beschränkung unbekannt ist, wird 0 zurückgegeben.
Siehe uv_get_constrained_memory für weitere Informationen.
process.cpuUsage([previousValue])#
previousValue<Object>Ein früherer Rückgabewert eines Aufrufs vonprocess.cpuUsage().- Rückgabewert:
<Object>
Die process.cpuUsage()-Methode gibt die Benutzer- und System-CPU-Zeitnutzung des aktuellen Prozesses zurück, in einem Objekt mit den Eigenschaften user und system, deren Werte Mikrosekunden sind (Millionstel Sekunde). Diese Werte messen die Zeit, die jeweils im Benutzer- und Systemcode verbracht wurde, und können letztendlich größer sein als die tatsächlich verstrichene Zeit, wenn mehrere CPU-Kerne für diesen Prozess arbeiten.
Das Ergebnis eines vorherigen Aufrufs von process.cpuUsage() kann als Argument an die Funktion übergeben werden, um eine Differenzmessung zu erhalten.
import { cpuUsage } from 'node:process'; const startUsage = cpuUsage(); // { user: 38579, system: 6986 } // spin the CPU for 500 milliseconds const now = Date.now(); while (Date.now() - now < 500); console.log(cpuUsage(startUsage)); // { user: 514883, system: 11226 }const { cpuUsage } = require('node:process'); const startUsage = cpuUsage(); // { user: 38579, system: 6986 } // spin the CPU for 500 milliseconds const now = Date.now(); while (Date.now() - now < 500); console.log(cpuUsage(startUsage)); // { user: 514883, system: 11226 }
process.cwd()#
- Rückgabe:
<string>
Die process.cwd()-Methode gibt das aktuelle Arbeitsverzeichnis des Node.js-Prozesses zurück.
import { cwd } from 'node:process'; console.log(`Current directory: ${cwd()}`);const { cwd } = require('node:process'); console.log(`Current directory: ${cwd()}`);
process.debugPort#
- Typ:
<number>
Der Port, der vom Node.js-Debugger verwendet wird, wenn dieser aktiviert ist.
import process from 'node:process'; process.debugPort = 5858;const process = require('node:process'); process.debugPort = 5858;
process.disconnect()#
Wenn der Node.js-Prozess mit einem IPC-Kanal gestartet wurde, schließt die process.disconnect()-Methode den IPC-Kanal zum Elternprozess, wodurch der Kindprozess ordnungsgemäß beendet werden kann, sobald keine anderen Verbindungen mehr bestehen, die ihn am Leben erhalten.
Die Wirkung des Aufrufs von process.disconnect() ist die gleiche wie der Aufruf von ChildProcess.disconnect() vom Elternprozess aus.
Wenn der Node.js-Prozess nicht mit einem IPC-Kanal gestartet wurde, wird process.disconnect() undefined sein.
process.dlopen(module, filename[, flags])#
module<Object>filename<string>flags<os.constants.dlopen>Standard:os.constants.dlopen.RTLD_LAZY
Die process.dlopen()-Methode ermöglicht das dynamische Laden von Shared Objects. Sie wird primär von require() zum Laden von C++-Addons verwendet und sollte außer in speziellen Fällen nicht direkt verwendet werden. Mit anderen Worten, require() sollte gegenüber process.dlopen() bevorzugt werden, es sei denn, es gibt spezifische Gründe, wie benutzerdefinierte dlopen-Flags oder das Laden aus ES-Modulen.
Das flags-Argument ist ein Integer, der die Spezifikation des dlopen-Verhaltens ermöglicht. Siehe die Dokumentation zu os.constants.dlopen für Details.
Eine wichtige Voraussetzung beim Aufruf von process.dlopen() ist, dass die module-Instanz übergeben werden muss. Funktionen, die vom C++-Addon exportiert werden, sind dann über module.exports zugänglich.
Das untenstehende Beispiel zeigt, wie ein C++-Addon namens local.node geladen wird, das eine foo-Funktion exportiert. Alle Symbole werden geladen, bevor der Aufruf zurückkehrt, indem die Konstante RTLD_NOW übergeben wird. In diesem Beispiel wird davon ausgegangen, dass die Konstante verfügbar ist.
import { dlopen } from 'node:process'; import { constants } from 'node:os'; import { fileURLToPath } from 'node:url'; const module = { exports: {} }; dlopen(module, fileURLToPath(new URL('local.node', import.meta.url)), constants.dlopen.RTLD_NOW); module.exports.foo();const { dlopen } = require('node:process'); const { constants } = require('node:os'); const { join } = require('node:path'); const module = { exports: {} }; dlopen(module, join(__dirname, 'local.node'), constants.dlopen.RTLD_NOW); module.exports.foo();
process.emitWarning(warning[, options])#
warning<string>|<Error>Die Warnung, die ausgegeben werden soll.options<Object>type<string>WennwarningeinStringist, isttypeder Name, der für die Art der ausgegebenen Warnung verwendet wird. Standard:'Warning'.code<string>Ein eindeutiger Identifikator für die ausgegebene Warnungsinstanz.ctor<Function>WennwarningeinStringist, istctoreine optionale Funktion, die verwendet wird, um den generierten Stack-Trace zu begrenzen. Standard:process.emitWarning.detail<string>Zusätzlicher Text, der in den Fehler aufgenommen werden soll.
Die process.emitWarning()-Methode kann verwendet werden, um benutzerdefinierte oder anwendungsspezifische Prozesswarnungen auszugeben. Diese können abgehört werden, indem ein Handler zum 'warning'-Ereignis hinzugefügt wird.
import { emitWarning } from 'node:process'; // Emit a warning with a code and additional detail. emitWarning('Something happened!', { code: 'MY_WARNING', detail: 'This is some additional information', }); // Emits: // (node:56338) [MY_WARNING] Warning: Something happened! // This is some additional informationconst { emitWarning } = require('node:process'); // Emit a warning with a code and additional detail. emitWarning('Something happened!', { code: 'MY_WARNING', detail: 'This is some additional information', }); // Emits: // (node:56338) [MY_WARNING] Warning: Something happened! // This is some additional information
In diesem Beispiel wird intern von process.emitWarning() ein Error-Objekt generiert und an den 'warning'-Handler weitergereicht.
import process from 'node:process'; process.on('warning', (warning) => { console.warn(warning.name); // 'Warning' console.warn(warning.message); // 'Something happened!' console.warn(warning.code); // 'MY_WARNING' console.warn(warning.stack); // Stack trace console.warn(warning.detail); // 'This is some additional information' });const process = require('node:process'); process.on('warning', (warning) => { console.warn(warning.name); // 'Warning' console.warn(warning.message); // 'Something happened!' console.warn(warning.code); // 'MY_WARNING' console.warn(warning.stack); // Stack trace console.warn(warning.detail); // 'This is some additional information' });
Wenn warning als Error-Objekt übergeben wird, wird das options-Argument ignoriert.
process.emitWarning(warning[, type[, code]][, ctor])#
warning<string>|<Error>Die Warnung, die ausgegeben werden soll.type<string>WennwarningeinStringist, isttypeder Name, der für die Art der ausgegebenen Warnung verwendet wird. Standard:'Warning'.code<string>Ein eindeutiger Identifikator für die ausgegebene Warnungsinstanz.ctor<Function>WennwarningeinStringist, istctoreine optionale Funktion, die verwendet wird, um den generierten Stack-Trace zu begrenzen. Standard:process.emitWarning.
Die process.emitWarning()-Methode kann verwendet werden, um benutzerdefinierte oder anwendungsspezifische Prozesswarnungen auszugeben. Diese können abgehört werden, indem ein Handler zum 'warning'-Ereignis hinzugefügt wird.
import { emitWarning } from 'node:process'; // Emit a warning using a string. emitWarning('Something happened!'); // Emits: (node: 56338) Warning: Something happened!const { emitWarning } = require('node:process'); // Emit a warning using a string. emitWarning('Something happened!'); // Emits: (node: 56338) Warning: Something happened!
import { emitWarning } from 'node:process'; // Emit a warning using a string and a type. emitWarning('Something Happened!', 'CustomWarning'); // Emits: (node:56338) CustomWarning: Something Happened!const { emitWarning } = require('node:process'); // Emit a warning using a string and a type. emitWarning('Something Happened!', 'CustomWarning'); // Emits: (node:56338) CustomWarning: Something Happened!
import { emitWarning } from 'node:process'; emitWarning('Something happened!', 'CustomWarning', 'WARN001'); // Emits: (node:56338) [WARN001] CustomWarning: Something happened!const { emitWarning } = require('node:process'); process.emitWarning('Something happened!', 'CustomWarning', 'WARN001'); // Emits: (node:56338) [WARN001] CustomWarning: Something happened!
In jedem der vorherigen Beispiele wird intern von process.emitWarning() ein Error-Objekt generiert und an den 'warning'-Handler weitergereicht.
import process from 'node:process'; process.on('warning', (warning) => { console.warn(warning.name); console.warn(warning.message); console.warn(warning.code); console.warn(warning.stack); });const process = require('node:process'); process.on('warning', (warning) => { console.warn(warning.name); console.warn(warning.message); console.warn(warning.code); console.warn(warning.stack); });
Wenn warning als Error-Objekt übergeben wird, wird es unverändert an den 'warning'-Event-Handler weitergereicht (und die optionalen Argumente type, code und ctor werden ignoriert).
import { emitWarning } from 'node:process'; // Emit a warning using an Error object. const myWarning = new Error('Something happened!'); // Use the Error name property to specify the type name myWarning.name = 'CustomWarning'; myWarning.code = 'WARN001'; emitWarning(myWarning); // Emits: (node:56338) [WARN001] CustomWarning: Something happened!const { emitWarning } = require('node:process'); // Emit a warning using an Error object. const myWarning = new Error('Something happened!'); // Use the Error name property to specify the type name myWarning.name = 'CustomWarning'; myWarning.code = 'WARN001'; emitWarning(myWarning); // Emits: (node:56338) [WARN001] CustomWarning: Something happened!
Ein TypeError wird geworfen, wenn warning etwas anderes als ein String oder ein Error-Objekt ist.
Obwohl Prozesswarnungen Error-Objekte verwenden, ist der Prozesswarnungsmechanismus kein Ersatz für normale Fehlerbehandlungsmechanismen.
Die folgende zusätzliche Behandlung wird implementiert, wenn der Warnungstyp 'DeprecationWarning' ist:
- Wenn das Kommandozeilenflag
--throw-deprecationverwendet wird, wird die Deprecation-Warnung als Ausnahme geworfen, anstatt als Ereignis ausgegeben zu werden. - Wenn das Kommandozeilenflag
--no-deprecationverwendet wird, wird die Deprecation-Warnung unterdrückt. - Wenn das Kommandozeilenflag
--trace-deprecationverwendet wird, wird die Deprecation-Warnung zusammen mit dem vollständigen Stack-Trace anstderrausgegeben.
Vermeidung doppelter Warnungen#
Als bewährte Methode sollten Warnungen nur einmal pro Prozess ausgegeben werden. Platzieren Sie dazu den emitWarning()-Aufruf hinter einer Booleschen Variable.
import { emitWarning } from 'node:process'; function emitMyWarning() { if (!emitMyWarning.warned) { emitMyWarning.warned = true; emitWarning('Only warn once!'); } } emitMyWarning(); // Emits: (node: 56339) Warning: Only warn once! emitMyWarning(); // Emits nothingconst { emitWarning } = require('node:process'); function emitMyWarning() { if (!emitMyWarning.warned) { emitMyWarning.warned = true; emitWarning('Only warn once!'); } } emitMyWarning(); // Emits: (node: 56339) Warning: Only warn once! emitMyWarning(); // Emits nothing
process.env#
- Typ:
<Object>
Die process.env-Eigenschaft gibt ein Objekt zurück, das die Benutzerumgebung enthält. Siehe environ(7).
Ein Beispiel für dieses Objekt sieht so aus:
{
TERM: 'xterm-256color',
SHELL: '/usr/local/bin/bash',
USER: 'maciej',
PATH: '~/.bin/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin',
PWD: '/Users/maciej',
EDITOR: 'vim',
SHLVL: '1',
HOME: '/Users/maciej',
LOGNAME: 'maciej',
_: '/usr/local/bin/node'
}
Es ist möglich, dieses Objekt zu ändern, aber solche Änderungen werden außerhalb des Node.js-Prozesses nicht reflektiert, oder (sofern nicht explizit angefordert) nicht an andere Worker-Threads. Mit anderen Worten, das folgende Beispiel würde nicht funktionieren:
node -e 'process.env.foo = "bar"' && echo $foo
Während das Folgende funktionieren würde:
import { env } from 'node:process'; env.foo = 'bar'; console.log(env.foo);const { env } = require('node:process'); env.foo = 'bar'; console.log(env.foo);
Das Zuweisen einer Eigenschaft an process.env konvertiert den Wert implizit in einen String. Dieses Verhalten ist veraltet. Zukünftige Versionen von Node.js könnten einen Fehler werfen, wenn der Wert kein String, keine Zahl oder kein Boolescher Wert ist.
import { env } from 'node:process'; env.test = null; console.log(env.test); // => 'null' env.test = undefined; console.log(env.test); // => 'undefined'const { env } = require('node:process'); env.test = null; console.log(env.test); // => 'null' env.test = undefined; console.log(env.test); // => 'undefined'
Verwenden Sie delete, um eine Eigenschaft aus process.env zu löschen.
import { env } from 'node:process'; env.TEST = 1; delete env.TEST; console.log(env.TEST); // => undefinedconst { env } = require('node:process'); env.TEST = 1; delete env.TEST; console.log(env.TEST); // => undefined
Auf Windows-Betriebssystemen sind Umgebungsvariablen groß-/kleinschreibungsunabhängig.
import { env } from 'node:process'; env.TEST = 1; console.log(env.test); // => 1const { env } = require('node:process'); env.TEST = 1; console.log(env.test); // => 1
Sofern beim Erstellen einer Worker-Instanz nicht explizit angegeben, hat jeder Worker-Thread seine eigene Kopie von process.env, basierend auf dem process.env seines übergeordneten Threads oder was auch immer als env-Option an den Worker-Konstruktor übergeben wurde. Änderungen an process.env sind nicht über Worker-Threads hinweg sichtbar, und nur der Hauptthread kann Änderungen vornehmen, die für das Betriebssystem oder für native Add-ons sichtbar sind. Unter Windows arbeitet eine Kopie von process.env in einer Worker-Instanz im Gegensatz zum Hauptthread auf eine Art, die Groß-/Kleinschreibung beachtet.
process.execArgv#
- Typ:
<string[]>
Die process.execArgv-Eigenschaft gibt die Menge der Node.js-spezifischen Kommandozeilenoptionen zurück, die beim Start des Node.js-Prozesses übergeben wurden. Diese Optionen erscheinen nicht im Array, das von der process.argv-Eigenschaft zurückgegeben wird, und beinhalten nicht die Node.js-Ausführungsdatei, den Namen des Skripts oder Optionen, die auf den Skriptnamen folgen. Diese Optionen sind nützlich, um Kindprozesse mit derselben Ausführungsumgebung wie der Elternprozess zu starten.
node --icu-data-dir=./foo --require ./bar.js script.js --version
Führt in process.execArgv zu:
["--icu-data-dir=./foo", "--require", "./bar.js"]
Und process.argv:
['/usr/local/bin/node', 'script.js', '--version']
Siehe Worker-Konstruktor für das detaillierte Verhalten von Worker-Threads mit dieser Eigenschaft.
process.execPath#
- Typ:
<string>
Die process.execPath-Eigenschaft gibt den absoluten Pfadnamen der ausführbaren Datei zurück, die den Node.js-Prozess gestartet hat. Symbolische Links werden, falls vorhanden, aufgelöst.
'/usr/local/bin/node'
process.execve(file[, args[, env]])#
Stabilität: 1 - Experimentell
file<string>Der Name oder Pfad der auszuführenden Datei.args<string[]>Liste von String-Argumenten. Kein Argument darf ein Null-Byte (\u0000) enthalten.env<Object>Umgebung Schlüssel-Wert-Paare. Kein Schlüssel oder Wert darf ein Null-Byte (\u0000) enthalten. Standard:process.env.
Ersetzt den aktuellen Prozess durch einen neuen Prozess.
Dies wird durch die Verwendung der POSIX-Funktion execve erreicht, weshalb kein Speicher oder andere Ressourcen des aktuellen Prozesses erhalten bleiben, mit Ausnahme der Standard-Eingabe-, Standard-Ausgabe- und Standard-Fehler-Dateideskriptoren.
Alle anderen Ressourcen werden vom System verworfen, wenn die Prozesse ausgetauscht werden, ohne dass Exit- oder Close-Ereignisse ausgelöst werden und ohne dass Bereinigungs-Handler ausgeführt werden.
Diese Funktion kehrt niemals zurück, es sei denn, ein Fehler ist aufgetreten.
Diese Funktion ist unter Windows oder IBM i nicht verfügbar.
process.exit([code])#
code<integer>|<string>|<null>|<undefined>Der Exit-Code. Bei String-Typ sind nur Integer-Strings (z. B. '1') erlaubt. Standard:0.
Die process.exit()-Methode weist Node.js an, den Prozess synchron mit einem Exit-Status von code zu beenden. Wenn code weggelassen wird, verwendet exit entweder den 'Erfolgs'-Code 0 oder den Wert von process.exitCode, falls dieser gesetzt wurde. Node.js wird nicht beendet, bis alle 'exit'-Event-Listener aufgerufen wurden.
Um mit einem 'Fehler'-Code zu beenden:
import { exit } from 'node:process'; exit(1);const { exit } = require('node:process'); exit(1);
Die Shell, die Node.js ausgeführt hat, sollte den Exit-Code als 1 sehen.
Der Aufruf von process.exit() zwingt den Prozess dazu, so schnell wie möglich zu beenden, selbst wenn noch asynchrone Operationen ausstehen, die noch nicht vollständig abgeschlossen sind, einschließlich E/A-Operationen an process.stdout und process.stderr.
In den meisten Situationen ist es nicht tatsächlich notwendig, process.exit() explizit aufzurufen. Der Node.js-Prozess wird von alleine beenden, wenn keine weiteren Arbeiten in der Event-Loop anstehen. Die process.exitCode-Eigenschaft kann gesetzt werden, um dem Prozess mitzuteilen, welcher Exit-Code verwendet werden soll, wenn der Prozess ordnungsgemäß beendet wird.
Beispielsweise illustriert das folgende Beispiel einen Missbrauch der process.exit()-Methode, der dazu führen könnte, dass an stdout ausgegebene Daten abgeschnitten und verloren gehen:
import { exit } from 'node:process'; // This is an example of what *not* to do: if (someConditionNotMet()) { printUsageToStdout(); exit(1); }const { exit } = require('node:process'); // This is an example of what *not* to do: if (someConditionNotMet()) { printUsageToStdout(); exit(1); }
Der Grund, warum dies problematisch ist, liegt darin, dass Schreibvorgänge an process.stdout in Node.js manchmal asynchron sind und über mehrere Ticks der Node.js Event-Loop hinweg auftreten können. Der Aufruf von process.exit() zwingt den Prozess jedoch dazu, zu beenden, bevor diese zusätzlichen Schreibvorgänge an stdout durchgeführt werden können.
Anstatt process.exit() direkt aufzurufen, sollte der Code das process.exitCode setzen und dem Prozess ermöglichen, natürlich zu beenden, indem das Einplanen weiterer Arbeiten für die Event-Loop vermieden wird:
import process from 'node:process'; // How to properly set the exit code while letting // the process exit gracefully. if (someConditionNotMet()) { printUsageToStdout(); process.exitCode = 1; }const process = require('node:process'); // How to properly set the exit code while letting // the process exit gracefully. if (someConditionNotMet()) { printUsageToStdout(); process.exitCode = 1; }
Wenn es notwendig ist, den Node.js-Prozess aufgrund einer Fehlerbedingung zu beenden, ist das Werfen eines nicht abgefangenen Fehlers und das Zulassen, dass der Prozess entsprechend beendet wird, sicherer als der Aufruf von process.exit().
In Worker-Threads stoppt diese Funktion den aktuellen Thread anstelle des aktuellen Prozesses.
process.exitCode#
- Typ:
<integer>|<string>|<null>|<undefined>Der Exit-Code. Bei String-Typ sind nur Integer-Strings (z. B. '1') erlaubt. Standard:undefined.
Eine Zahl, die der Prozess-Exit-Code ist, wenn der Prozess entweder ordnungsgemäß beendet wird oder über process.exit() beendet wird, ohne einen Code anzugeben.
Der Wert von process.exitCode kann aktualisiert werden, indem entweder process.exitCode ein Wert zugewiesen wird oder ein Argument an process.exit() übergeben wird.
$ node -e 'process.exitCode = 9'; echo $?
9
$ node -e 'process.exit(42)'; echo $?
42
$ node -e 'process.exitCode = 9; process.exit(42)'; echo $?
42
Der Wert kann auch implizit von Node.js gesetzt werden, wenn nicht behebbare Fehler auftreten (z. B. beim Auftreten eines ungelösten Top-Level-Await). Explizite Manipulationen des Exit-Codes haben jedoch immer Vorrang vor impliziten.
$ node --input-type=module -e 'await new Promise(() => {})'; echo $?
13
$ node --input-type=module -e 'process.exitCode = 9; await new Promise(() => {})'; echo $?
9
process.features.cached_builtins#
- Typ:
<boolean>
Ein boolescher Wert, der true ist, wenn der aktuelle Node.js-Build eingebaute Module zwischenspeichert.
process.features.debug#
- Typ:
<boolean>
Ein boolescher Wert, der true ist, wenn der aktuelle Node.js-Build ein Debug-Build ist.
process.features.inspector#
- Typ:
<boolean>
Ein boolescher Wert, der true ist, wenn der aktuelle Node.js-Build den Inspektor enthält.
process.features.ipv6#
Stabilität: 0 - Veraltet. Diese Eigenschaft ist immer true, und alle darauf basierenden Prüfungen sind redundant.
- Typ:
<boolean>
Ein boolescher Wert, der true ist, wenn der aktuelle Node.js-Build Unterstützung für IPv6 enthält.
Da alle Node.js-Builds IPv6-Unterstützung haben, ist dieser Wert immer true.
process.features.require_module#
- Typ:
<boolean>
Ein boolescher Wert, der true ist, wenn der aktuelle Node.js-Build das Laden von ECMAScript-Modulen mittels require() unterstützt.
process.features.tls#
- Typ:
<boolean>
Ein boolescher Wert, der true ist, wenn der aktuelle Node.js-Build Unterstützung für TLS enthält.
process.features.tls_alpn#
Stabilität: 0 - Veraltet. Verwenden Sie stattdessen process.features.tls.
- Typ:
<boolean>
Ein boolescher Wert, der true ist, wenn der aktuelle Node.js-Build Unterstützung für ALPN in TLS enthält.
In Node.js 11.0.0 und späteren Versionen bieten die OpenSSL-Abhängigkeiten bedingungslose ALPN-Unterstützung. Dieser Wert ist daher identisch mit dem von process.features.tls.
process.features.tls_ocsp#
Stabilität: 0 - Veraltet. Verwenden Sie stattdessen process.features.tls.
- Typ:
<boolean>
Ein boolescher Wert, der true ist, wenn der aktuelle Node.js-Build Unterstützung für OCSP in TLS enthält.
In Node.js 11.0.0 und späteren Versionen bieten die OpenSSL-Abhängigkeiten bedingungslose OCSP-Unterstützung. Dieser Wert ist daher identisch mit dem von process.features.tls.
process.features.tls_sni#
Stabilität: 0 - Veraltet. Verwenden Sie stattdessen process.features.tls.
- Typ:
<boolean>
Ein boolescher Wert, der true ist, wenn der aktuelle Node.js-Build Unterstützung für SNI in TLS enthält.
In Node.js 11.0.0 und späteren Versionen bieten die OpenSSL-Abhängigkeiten bedingungslose SNI-Unterstützung. Dieser Wert ist daher identisch mit dem von process.features.tls.
process.features.typescript#
Stabilität: 1.2 - Release-Kandidat
Ein Wert, der standardmäßig "strip" ist und false, wenn Node.js mit --no-strip-types ausgeführt wird.
process.features.uv#
Stabilität: 0 - Veraltet. Diese Eigenschaft ist immer true, und alle darauf basierenden Prüfungen sind redundant.
- Typ:
<boolean>
Ein boolescher Wert, der true ist, wenn der aktuelle Node.js-Build Unterstützung für libuv enthält.
Da es nicht möglich ist, Node.js ohne libuv zu bauen, ist dieser Wert immer true.
process.finalization.register(ref, callback)#
Stabilität: 1.1 - Aktive Entwicklung
ref<Object>|<Function>Die Referenz auf die Ressource, die verfolgt wird.callback<Function>Die Callback-Funktion, die aufgerufen wird, wenn die Ressource finalisiert wird.ref<Object>|<Function>Die Referenz auf die Ressource, die verfolgt wird.event<string>Das Ereignis, das die Finalisierung ausgelöst hat. Standardmäßig 'exit'.
Diese Funktion registriert einen Callback, der aufgerufen wird, wenn der Prozess das exit-Ereignis auslöst, falls das ref-Objekt nicht von der Garbage Collection bereinigt wurde. Wenn das ref-Objekt vor dem Auslösen des exit-Ereignisses bereinigt wurde, wird der Callback aus der Finalisierungs-Registry entfernt und beim Prozessende nicht aufgerufen.
Innerhalb des Callbacks können Sie die vom ref-Objekt zugewiesenen Ressourcen freigeben. Beachten Sie, dass alle für das beforeExit-Ereignis geltenden Einschränkungen auch für die callback-Funktion gelten; dies bedeutet, dass die Möglichkeit besteht, dass der Callback unter besonderen Umständen nicht aufgerufen wird.
Die Idee dieser Funktion ist es, Ihnen zu helfen, Ressourcen freizugeben, wenn der Prozess beendet wird, aber auch zuzulassen, dass das Objekt von der Garbage Collection bereinigt wird, wenn es nicht mehr verwendet wird.
Z. B.: Sie können ein Objekt registrieren, das einen Puffer enthält, und sicherstellen, dass dieser Puffer bei Prozessende freigegeben wird. Wenn das Objekt jedoch vor Prozessende bereinigt wird, müssen wir den Puffer nicht mehr freigeben, daher entfernen wir in diesem Fall einfach den Callback aus der Finalisierungs-Registry.
const { finalization } = require('node:process'); // Please make sure that the function passed to finalization.register() // does not create a closure around unnecessary objects. function onFinalize(obj, event) { // You can do whatever you want with the object obj.dispose(); } function setup() { // This object can be safely garbage collected, // and the resulting shutdown function will not be called. // There are no leaks. const myDisposableObject = { dispose() { // Free your resources synchronously }, }; finalization.register(myDisposableObject, onFinalize); } setup();import { finalization } from 'node:process'; // Please make sure that the function passed to finalization.register() // does not create a closure around unnecessary objects. function onFinalize(obj, event) { // You can do whatever you want with the object obj.dispose(); } function setup() { // This object can be safely garbage collected, // and the resulting shutdown function will not be called. // There are no leaks. const myDisposableObject = { dispose() { // Free your resources synchronously }, }; finalization.register(myDisposableObject, onFinalize); } setup();
Der obige Code stützt sich auf die folgenden Annahmen:
- Arrow-Funktionen werden vermieden.
- Reguläre Funktionen werden innerhalb des globalen Kontexts (Root) empfohlen.
Reguläre Funktionen könnten auf den Kontext verweisen, in dem das obj lebt, wodurch das obj nicht Garbage-Collection-fähig wird.
Arrow-Funktionen behalten den vorherigen Kontext bei. Betrachten Sie beispielsweise:
class Test {
constructor() {
finalization.register(this, (ref) => ref.dispose());
// Even something like this is highly discouraged
// finalization.register(this, () => this.dispose());
}
dispose() {}
}
Es ist sehr unwahrscheinlich (nicht unmöglich), dass dieses Objekt von der Garbage Collection bereinigt wird, aber wenn dies nicht geschieht, wird dispose aufgerufen, wenn process.exit aufgerufen wird.
Seien Sie vorsichtig und verlassen Sie sich bei der Entsorgung kritischer Ressourcen nicht auf dieses Feature, da nicht garantiert ist, dass der Callback unter allen Umständen aufgerufen wird.
process.finalization.registerBeforeExit(ref, callback)#
Stabilität: 1.1 - Aktive Entwicklung
ref<Object>|<Function>Die Referenz auf die Ressource, die verfolgt wird.callback<Function>Die Callback-Funktion, die aufgerufen wird, wenn die Ressource finalisiert wird.ref<Object>|<Function>Die Referenz auf die Ressource, die verfolgt wird.event<string>Das Ereignis, das die Finalisierung ausgelöst hat. Standardmäßig 'beforeExit'.
Diese Funktion verhält sich genau wie register, außer dass der Callback aufgerufen wird, wenn der Prozess das beforeExit-Ereignis auslöst, falls das ref-Objekt nicht von der Garbage Collection bereinigt wurde.
Beachten Sie, dass alle für das beforeExit-Ereignis geltenden Einschränkungen auch für die callback-Funktion gelten; dies bedeutet, dass die Möglichkeit besteht, dass der Callback unter besonderen Umständen nicht aufgerufen wird.
process.finalization.unregister(ref)#
Stabilität: 1.1 - Aktive Entwicklung
ref<Object>|<Function>Die Referenz auf die Ressource, die zuvor registriert wurde.
Diese Funktion entfernt die Registrierung des Objekts aus der Finalisierungs-Registry, sodass der Callback nicht mehr aufgerufen wird.
const { finalization } = require('node:process'); // Please make sure that the function passed to finalization.register() // does not create a closure around unnecessary objects. function onFinalize(obj, event) { // You can do whatever you want with the object obj.dispose(); } function setup() { // This object can be safely garbage collected, // and the resulting shutdown function will not be called. // There are no leaks. const myDisposableObject = { dispose() { // Free your resources synchronously }, }; finalization.register(myDisposableObject, onFinalize); // Do something myDisposableObject.dispose(); finalization.unregister(myDisposableObject); } setup();import { finalization } from 'node:process'; // Please make sure that the function passed to finalization.register() // does not create a closure around unnecessary objects. function onFinalize(obj, event) { // You can do whatever you want with the object obj.dispose(); } function setup() { // This object can be safely garbage collected, // and the resulting shutdown function will not be called. // There are no leaks. const myDisposableObject = { dispose() { // Free your resources synchronously }, }; // Please make sure that the function passed to finalization.register() // does not create a closure around unnecessary objects. function onFinalize(obj, event) { // You can do whatever you want with the object obj.dispose(); } finalization.register(myDisposableObject, onFinalize); // Do something myDisposableObject.dispose(); finalization.unregister(myDisposableObject); } setup();
process.getActiveResourcesInfo()#
- Rückgabe:
<string[]>
Die process.getActiveResourcesInfo()-Methode gibt ein Array von Strings zurück, das die Typen der aktiven Ressourcen enthält, die derzeit die Event-Loop am Laufen halten.
import { getActiveResourcesInfo } from 'node:process'; import { setTimeout } from 'node:timers'; console.log('Before:', getActiveResourcesInfo()); setTimeout(() => {}, 1000); console.log('After:', getActiveResourcesInfo()); // Prints: // Before: [ 'CloseReq', 'TTYWrap', 'TTYWrap', 'TTYWrap' ] // After: [ 'CloseReq', 'TTYWrap', 'TTYWrap', 'TTYWrap', 'Timeout' ]const { getActiveResourcesInfo } = require('node:process'); const { setTimeout } = require('node:timers'); console.log('Before:', getActiveResourcesInfo()); setTimeout(() => {}, 1000); console.log('After:', getActiveResourcesInfo()); // Prints: // Before: [ 'TTYWrap', 'TTYWrap', 'TTYWrap' ] // After: [ 'TTYWrap', 'TTYWrap', 'TTYWrap', 'Timeout' ]
process.getBuiltinModule(id)#
id<string>ID des angeforderten eingebauten Moduls.- Rückgabe:
<Object>|<undefined>
process.getBuiltinModule(id) bietet eine Möglichkeit, eingebaute Module in einer global verfügbaren Funktion zu laden. ES-Module, die andere Umgebungen unterstützen müssen, können dies verwenden, um ein Node.js-Modul bedingt zu laden, wenn es in Node.js ausgeführt wird, ohne sich mit Auflösungsfehlern auseinandersetzen zu müssen, die von import in einer Nicht-Node.js-Umgebung geworfen werden können, oder dynamische import()-Aufrufe verwenden zu müssen, die entweder das Modul in ein asynchrones Modul verwandeln oder eine synchrone API in eine asynchrone.
if (globalThis.process?.getBuiltinModule) {
// Run in Node.js, use the Node.js fs module.
const fs = globalThis.process.getBuiltinModule('fs');
// If `require()` is needed to load user-modules, use createRequire()
const module = globalThis.process.getBuiltinModule('module');
const require = module.createRequire(import.meta.url);
const foo = require('foo');
}
Wenn id ein in der aktuellen Node.js-Prozessumgebung verfügbares eingebautes Modul spezifiziert, gibt die Methode process.getBuiltinModule(id) das entsprechende Modul zurück. Wenn id keinem eingebauten Modul entspricht, wird undefined zurückgegeben.
process.getBuiltinModule(id) akzeptiert eingebaute Modul-IDs, die von module.isBuiltin(id) erkannt werden. Einige eingebaute Module müssen mit dem node:-Präfix geladen werden, siehe eingebaute Module mit obligatorischem node:-Präfix. Die Referenzen, die von process.getBuiltinModule(id) zurückgegeben werden, zeigen immer auf das eingebaute Modul, das id entspricht, selbst wenn Benutzer require.cache so modifizieren, dass require(id) etwas anderes zurückgibt.
process.getegid()#
Die process.getegid()-Methode gibt die numerische effektive Gruppenidentität des Node.js-Prozesses zurück. (Siehe getegid(2).)
import process from 'node:process'; if (process.getegid) { console.log(`Current gid: ${process.getegid()}`); }const process = require('node:process'); if (process.getegid) { console.log(`Current gid: ${process.getegid()}`); }
Diese Funktion ist nur auf POSIX-Plattformen verfügbar (d. h. nicht unter Windows oder Android).
process.geteuid()#
- Rückgabewert:
<Object>
Die process.geteuid()-Methode gibt die numerische effektive Benutzeridentität des Prozesses zurück. (Siehe geteuid(2).)
import process from 'node:process'; if (process.geteuid) { console.log(`Current uid: ${process.geteuid()}`); }const process = require('node:process'); if (process.geteuid) { console.log(`Current uid: ${process.geteuid()}`); }
Diese Funktion ist nur auf POSIX-Plattformen verfügbar (d. h. nicht unter Windows oder Android).
process.getgid()#
- Rückgabewert:
<Object>
Die process.getgid()-Methode gibt die numerische Gruppenidentität des Prozesses zurück. (Siehe getgid(2).)
import process from 'node:process'; if (process.getgid) { console.log(`Current gid: ${process.getgid()}`); }const process = require('node:process'); if (process.getgid) { console.log(`Current gid: ${process.getgid()}`); }
Diese Funktion ist nur auf POSIX-Plattformen verfügbar (d. h. nicht unter Windows oder Android).
process.getgroups()#
- Gibt zurück:
<integer[]>
Die process.getgroups()-Methode gibt ein Array mit den zusätzlichen Gruppen-IDs zurück. POSIX lässt offen, ob die effektive Gruppen-ID enthalten ist, aber Node.js stellt sicher, dass sie immer enthalten ist.
import process from 'node:process'; if (process.getgroups) { console.log(process.getgroups()); // [ 16, 21, 297 ] }const process = require('node:process'); if (process.getgroups) { console.log(process.getgroups()); // [ 16, 21, 297 ] }
Diese Funktion ist nur auf POSIX-Plattformen verfügbar (d. h. nicht unter Windows oder Android).
process.getuid()#
- Gibt zurück:
<integer>
Die process.getuid()-Methode gibt die numerische Benutzeridentität des Prozesses zurück. (Siehe getuid(2).)
import process from 'node:process'; if (process.getuid) { console.log(`Current uid: ${process.getuid()}`); }const process = require('node:process'); if (process.getuid) { console.log(`Current uid: ${process.getuid()}`); }
Diese Funktion ist unter Windows nicht verfügbar.
process.hasUncaughtExceptionCaptureCallback()#
- Rückgabewert:
<boolean>
Gibt an, ob ein Callback mit process.setUncaughtExceptionCaptureCallback() gesetzt wurde.
process.hrtime([time])#
Stabilität: 3 – Veraltet. Verwenden Sie stattdessen process.hrtime.bigint().
time<integer[]>Das Ergebnis eines vorherigen Aufrufs vonprocess.hrtime()- Gibt zurück:
<integer[]>
Dies ist die veraltete Version von process.hrtime.bigint(), bevor bigint in JavaScript eingeführt wurde.
Die Methode process.hrtime() gibt die aktuelle hochauflösende Echtzeit als [Sekunden, Nanosekunden]-Tupel-Array zurück, wobei Nanosekunden den verbleibenden Teil der Echtzeit darstellt, der nicht mit Sekundengenauigkeit abgebildet werden kann.
time ist ein optionaler Parameter, der das Ergebnis eines vorherigen process.hrtime()-Aufrufs sein muss, um eine Differenz zur aktuellen Zeit zu bilden. Wenn der übergebene Parameter kein Tupel-Array ist, wird ein TypeError ausgelöst. Die Übergabe eines benutzerdefinierten Arrays anstelle des Ergebnisses eines vorherigen process.hrtime()-Aufrufs führt zu undefiniertem Verhalten.
Diese Zeiten beziehen sich auf einen willkürlichen Zeitpunkt in der Vergangenheit und stehen in keinem Zusammenhang mit der Tageszeit; sie unterliegen daher keiner Uhrendrift. Die Hauptverwendung liegt in der Leistungsmessung zwischen Zeitintervallen.
import { hrtime } from 'node:process'; const NS_PER_SEC = 1e9; const time = hrtime(); // [ 1800216, 25 ] setTimeout(() => { const diff = hrtime(time); // [ 1, 552 ] console.log(`Benchmark took ${diff[0] * NS_PER_SEC + diff[1]} nanoseconds`); // Benchmark took 1000000552 nanoseconds }, 1000);const { hrtime } = require('node:process'); const NS_PER_SEC = 1e9; const time = hrtime(); // [ 1800216, 25 ] setTimeout(() => { const diff = hrtime(time); // [ 1, 552 ] console.log(`Benchmark took ${diff[0] * NS_PER_SEC + diff[1]} nanoseconds`); // Benchmark took 1000000552 nanoseconds }, 1000);
process.hrtime.bigint()#
- Gibt zurück:
<bigint>
Die bigint-Version der Methode process.hrtime() gibt die aktuelle hochauflösende Echtzeit in Nanosekunden als bigint zurück.
Im Gegensatz zu process.hrtime() unterstützt sie kein zusätzliches time-Argument, da die Differenz einfach durch Subtraktion der beiden bigint-Werte berechnet werden kann.
import { hrtime } from 'node:process'; const start = hrtime.bigint(); // 191051479007711n setTimeout(() => { const end = hrtime.bigint(); // 191052633396993n console.log(`Benchmark took ${end - start} nanoseconds`); // Benchmark took 1154389282 nanoseconds }, 1000);const { hrtime } = require('node:process'); const start = hrtime.bigint(); // 191051479007711n setTimeout(() => { const end = hrtime.bigint(); // 191052633396993n console.log(`Benchmark took ${end - start} nanoseconds`); // Benchmark took 1154389282 nanoseconds }, 1000);
process.initgroups(user, extraGroup)#
user<string>|<number>Der Benutzername oder die numerische Kennung.extraGroup<string>|<number>Ein Gruppenname oder eine numerische Kennung.
Die Methode process.initgroups() liest die Datei /etc/group und initialisiert die Gruppenzugriffsliste unter Verwendung aller Gruppen, denen der Benutzer angehört. Dies ist eine privilegierte Operation, die erfordert, dass der Node.js-Prozess entweder root-Zugriff hat oder über die CAP_SETGID-Fähigkeit verfügt.
Seien Sie vorsichtig beim Ablegen von Privilegien.
import { getgroups, initgroups, setgid } from 'node:process'; console.log(getgroups()); // [ 0 ] initgroups('nodeuser', 1000); // switch user console.log(getgroups()); // [ 27, 30, 46, 1000, 0 ] setgid(1000); // drop root gid console.log(getgroups()); // [ 27, 30, 46, 1000 ]const { getgroups, initgroups, setgid } = require('node:process'); console.log(getgroups()); // [ 0 ] initgroups('nodeuser', 1000); // switch user console.log(getgroups()); // [ 27, 30, 46, 1000, 0 ] setgid(1000); // drop root gid console.log(getgroups()); // [ 27, 30, 46, 1000 ]
Diese Funktion ist nur auf POSIX-Plattformen verfügbar (d. h. nicht unter Windows oder Android). Dieses Feature ist in Worker-Threads nicht verfügbar.
process.kill(pid[, signal])#
pid<number>Eine Prozess-IDsignal<string>|<number>Das zu sendende Signal, entweder als String oder Zahl. Standard:'SIGTERM'.
Die Methode process.kill() sendet das signal an den durch pid identifizierten Prozess.
Signalnamen sind Strings wie 'SIGINT' oder 'SIGHUP'. Weitere Informationen finden Sie unter Signalereignisse und kill(2).
Diese Methode löst einen Fehler aus, wenn die Ziel-pid nicht existiert. Als Spezialfall kann ein Signal von 0 verwendet werden, um die Existenz eines Prozesses zu prüfen. Windows-Plattformen lösen einen Fehler aus, wenn die pid zum Beenden einer Prozessgruppe verwendet wird.
Obwohl der Funktionsname process.kill() lautet, ist es tatsächlich nur ein Signal-Sender, vergleichbar mit dem kill-Systemaufruf. Das gesendete Signal kann etwas anderes bewirken, als den Zielprozess zu beenden.
import process, { kill } from 'node:process'; process.on('SIGHUP', () => { console.log('Got SIGHUP signal.'); }); setTimeout(() => { console.log('Exiting.'); process.exit(0); }, 100); kill(process.pid, 'SIGHUP');const process = require('node:process'); process.on('SIGHUP', () => { console.log('Got SIGHUP signal.'); }); setTimeout(() => { console.log('Exiting.'); process.exit(0); }, 100); process.kill(process.pid, 'SIGHUP');
Wenn SIGUSR1 von einem Node.js-Prozess empfangen wird, startet Node.js den Debugger. Siehe Signalereignisse.
process.loadEnvFile(path)#
path<string>|<URL>|<Buffer>|<undefined>. Standard:'./.env'
Lädt die .env-Datei in process.env. Die Verwendung von NODE_OPTIONS in der .env-Datei hat keine Auswirkungen auf Node.js.
const { loadEnvFile } = require('node:process'); loadEnvFile();import { loadEnvFile } from 'node:process'; loadEnvFile();
process.mainModule#
Stabilität: 0 - Veraltet: Verwenden Sie stattdessen require.main.
- Typ:
<Object>
Die Eigenschaft process.mainModule bietet eine alternative Möglichkeit, auf require.main zuzugreifen. Der Unterschied besteht darin, dass, wenn sich das Hauptmodul zur Laufzeit ändert, require.main möglicherweise immer noch auf das ursprüngliche Hauptmodul verweist, in Modulen, die vor der Änderung angefordert wurden. Im Allgemeinen ist es sicher anzunehmen, dass beide auf dasselbe Modul verweisen.
Wie bei require.main ist process.mainModule undefined, wenn kein Einstiegsskript vorhanden ist.
process.memoryUsage()#
- Rückgabewert:
<Object>
Gibt ein Objekt zurück, das die Speichernutzung des Node.js-Prozesses in Bytes beschreibt.
import { memoryUsage } from 'node:process'; console.log(memoryUsage()); // Prints: // { // rss: 4935680, // heapTotal: 1826816, // heapUsed: 650472, // external: 49879, // arrayBuffers: 9386 // }const { memoryUsage } = require('node:process'); console.log(memoryUsage()); // Prints: // { // rss: 4935680, // heapTotal: 1826816, // heapUsed: 650472, // external: 49879, // arrayBuffers: 9386 // }
heapTotalundheapUsedbeziehen sich auf die Speichernutzung von V8.externalbezieht sich auf die Speichernutzung von C++-Objekten, die an JavaScript-Objekte gebunden sind, welche von V8 verwaltet werden.rss(Resident Set Size) ist die Menge des im Hauptspeicher belegten Platzes für den Prozess, einschließlich aller C++- und JavaScript-Objekte und Code.arrayBuffersbezieht sich auf Speicher, der fürArrayBuffers undSharedArrayBuffers zugewiesen wurde, einschließlich aller Node.js-Buffers. Dies ist auch imexternal-Wert enthalten. Wenn Node.js als eingebettete Bibliothek verwendet wird, kann dieser Wert0sein, da Zuweisungen fürArrayBuffers in diesem Fall möglicherweise nicht nachverfolgt werden.
Bei Verwendung von Worker-Threads ist rss ein Wert, der für den gesamten Prozess gültig ist, während sich die anderen Felder nur auf den aktuellen Thread beziehen.
Die Methode process.memoryUsage() iteriert über jede Seite, um Informationen über die Speichernutzung zu sammeln, was je nach Speicherauslastung des Programms langsam sein kann.
Ein Hinweis zur Prozess-Speichernutzung (memoryUsage)#
Unter Linux oder anderen Systemen, auf denen glibc üblicherweise verwendet wird, kann eine Anwendung trotz stabilem heapTotal ein anhaltendes rss-Wachstum aufweisen, was auf Fragmentierung durch die glibc-malloc-Implementierung zurückzuführen ist. Siehe nodejs/node#21973 für Informationen zum Wechsel zu einer alternativen malloc-Implementierung zur Lösung des Leistungsproblems.
process.memoryUsage.rss()#
- Gibt zurück:
<integer>
Die Methode process.memoryUsage.rss() gibt eine Ganzzahl zurück, die die Resident Set Size (RSS) in Bytes darstellt.
Die Resident Set Size ist die Menge des im Hauptspeicher belegten Platzes für den Prozess, einschließlich aller C++- und JavaScript-Objekte und Code.
Dies ist derselbe Wert wie die rss-Eigenschaft von process.memoryUsage(), aber process.memoryUsage.rss() ist schneller.
import { memoryUsage } from 'node:process'; console.log(memoryUsage.rss()); // 35655680const { memoryUsage } = require('node:process'); console.log(memoryUsage.rss()); // 35655680
process.nextTick(callback[, ...args])#
Stabilität: 3 - Veraltet: Verwenden Sie stattdessen queueMicrotask().
callback<Function>...args<any>Zusätzliche Argumente, die beim Aufruf descallbackübergeben werden sollen.
process.nextTick() fügt den callback zur "Next Tick Queue" hinzu. Diese Warteschlange wird vollständig geleert, nachdem die aktuelle Operation auf dem JavaScript-Stack abgeschlossen ist und bevor die Event-Loop fortgesetzt werden darf. Es ist möglich, eine Endlosschleife zu erzeugen, wenn process.nextTick() rekursiv aufgerufen wird. Siehe die Event Loop-Anleitung für Hintergrundinformationen.
import { nextTick } from 'node:process'; console.log('start'); nextTick(() => { console.log('nextTick callback'); }); console.log('scheduled'); // Output: // start // scheduled // nextTick callbackconst { nextTick } = require('node:process'); console.log('start'); nextTick(() => { console.log('nextTick callback'); }); console.log('scheduled'); // Output: // start // scheduled // nextTick callback
Dies ist wichtig bei der Entwicklung von APIs, um Benutzern die Möglichkeit zu geben, Event-Handler zuzuweisen, nachdem ein Objekt konstruiert wurde, aber bevor I/O stattgefunden hat.
import { nextTick } from 'node:process'; function MyThing(options) { this.setupOptions(options); nextTick(() => { this.startDoingStuff(); }); } const thing = new MyThing(); thing.getReadyForStuff(); // thing.startDoingStuff() gets called now, not before.const { nextTick } = require('node:process'); function MyThing(options) { this.setupOptions(options); nextTick(() => { this.startDoingStuff(); }); } const thing = new MyThing(); thing.getReadyForStuff(); // thing.startDoingStuff() gets called now, not before.
Es ist sehr wichtig, dass APIs entweder zu 100 % synchron oder zu 100 % asynchron sind. Betrachten Sie dieses Beispiel:
// WARNING! DO NOT USE! BAD UNSAFE HAZARD!
function maybeSync(arg, cb) {
if (arg) {
cb();
return;
}
fs.stat('file', cb);
}
Diese API ist gefährlich, da im folgenden Fall:
const maybeTrue = Math.random() > 0.5;
maybeSync(maybeTrue, () => {
foo();
});
bar();
Es ist nicht klar, ob foo() oder bar() zuerst aufgerufen wird.
Der folgende Ansatz ist wesentlich besser:
import { nextTick } from 'node:process'; function definitelyAsync(arg, cb) { if (arg) { nextTick(cb); return; } fs.stat('file', cb); }const { nextTick } = require('node:process'); function definitelyAsync(arg, cb) { if (arg) { nextTick(cb); return; } fs.stat('file', cb); }
Wann queueMicrotask() vs. process.nextTick() verwenden#
Die API queueMicrotask() ist eine Alternative zu process.nextTick(), die anstelle der "Next Tick Queue" die Ausführung einer Funktion unter Verwendung derselben Microtask-Warteschlange verzögert, die auch für die then-, catch- und finally-Handler von aufgelösten Promises verwendet wird.
Innerhalb von Node.js wird jedes Mal, wenn die "Next Tick Queue" geleert wird, die Microtask-Warteschlange unmittelbar danach geleert.
In CJS-Modulen werden daher process.nextTick()-Callbacks immer vor queueMicrotask()-Callbacks ausgeführt. Da ESM-Module jedoch bereits als Teil der Microtask-Warteschlange verarbeitet werden, werden queueMicrotask()-Callbacks dort immer vor process.nextTick()-Callbacks ausgeführt, da Node.js bereits dabei ist, die Microtask-Warteschlange zu leeren.
import { nextTick } from 'node:process'; Promise.resolve().then(() => console.log('resolve')); queueMicrotask(() => console.log('microtask')); nextTick(() => console.log('nextTick')); // Output: // resolve // microtask // nextTickconst { nextTick } = require('node:process'); Promise.resolve().then(() => console.log('resolve')); queueMicrotask(() => console.log('microtask')); nextTick(() => console.log('nextTick')); // Output: // nextTick // resolve // microtask
Für die meisten Anwendungsfälle bietet die queueMicrotask()-API einen portablen und zuverlässigen Mechanismus zur Verzögerung der Ausführung, der über verschiedene JavaScript-Plattformumgebungen hinweg funktioniert und process.nextTick() vorgezogen werden sollte. In einfachen Szenarien kann queueMicrotask() ein direkter Ersatz für process.nextTick() sein.
console.log('start');
queueMicrotask(() => {
console.log('microtask callback');
});
console.log('scheduled');
// Output:
// start
// scheduled
// microtask callback
Ein bemerkenswerter Unterschied zwischen den beiden APIs ist, dass process.nextTick() die Angabe zusätzlicher Werte ermöglicht, die als Argumente an die verzögerte Funktion übergeben werden, wenn diese aufgerufen wird. Um dasselbe mit queueMicrotask() zu erreichen, ist die Verwendung einer Closure oder einer gebundenen Funktion erforderlich.
function deferred(a, b) {
console.log('microtask', a + b);
}
console.log('start');
queueMicrotask(deferred.bind(undefined, 1, 2));
console.log('scheduled');
// Output:
// start
// scheduled
// microtask 3
Es gibt geringfügige Unterschiede bei der Behandlung von Fehlern, die innerhalb der Next Tick Queue und der Microtask-Warteschlange auftreten. Fehler, die innerhalb eines in die Warteschlange eingereihten Microtask-Callbacks geworfen werden, sollten nach Möglichkeit innerhalb des Callbacks behandelt werden. Wenn dies nicht geschieht, kann der process.on('uncaughtException')-Event-Handler verwendet werden, um die Fehler abzufangen und zu behandeln.
Im Zweifelsfall verwenden Sie queueMicrotask(), es sei denn, die spezifischen Fähigkeiten von process.nextTick() werden benötigt.
process.noDeprecation#
- Typ:
<boolean>
Die Eigenschaft process.noDeprecation gibt an, ob das Flag --no-deprecation im aktuellen Node.js-Prozess gesetzt ist. Weitere Informationen zum Verhalten dieses Flags finden Sie in der Dokumentation zum 'warning'-Ereignis und der emitWarning()-Methode.
process.permission#
- Typ:
<Object>
Diese API ist über das Flag --permission verfügbar.
process.permission ist ein Objekt, dessen Methoden zur Verwaltung der Berechtigungen für den aktuellen Prozess verwendet werden. Weitere Dokumentation finden Sie im Berechtigungsmodell.
process.permission.has(scope[, reference])#
Überprüft, ob der Prozess auf den angegebenen Bereich (Scope) und die Referenz zugreifen kann. Wenn keine Referenz angegeben ist, wird ein globaler Bereich angenommen. Beispielsweise prüft process.permission.has('fs.read'), ob der Prozess über ALLE Dateisystem-Leseberechtigungen verfügt.
Die Referenz hat eine Bedeutung, die auf dem bereitgestellten Bereich basiert. Zum Beispiel bezieht sich die Referenz, wenn der Bereich das Dateisystem ist, auf Dateien und Ordner.
Die verfügbaren Bereiche sind:
fs- Gesamtes Dateisystemfs.read- Dateisystem-Leseoperationenfs.write- Dateisystem-Schreiboperationenchild- Erzeugen von Kindprozessenworker- Erzeugen von Worker-Threads
// Check if the process has permission to read the README file
process.permission.has('fs.read', './README.md');
// Check if the process has read permission operations
process.permission.has('fs.read');
process.pid#
- Typ:
<integer>
Die Eigenschaft process.pid gibt die PID des Prozesses zurück.
import { pid } from 'node:process'; console.log(`This process is pid ${pid}`);const { pid } = require('node:process'); console.log(`This process is pid ${pid}`);
process.platform#
- Typ:
<string>
Die Eigenschaft process.platform gibt einen String zurück, der die Betriebssystemplattform identifiziert, für die die Node.js-Binary kompiliert wurde.
Derzeit mögliche Werte sind:
'aix''darwin''freebsd''linux''openbsd''sunos''win32'
import { platform } from 'node:process'; console.log(`This platform is ${platform}`);const { platform } = require('node:process'); console.log(`This platform is ${platform}`);
Der Wert 'android' kann ebenfalls zurückgegeben werden, wenn Node.js auf dem Android-Betriebssystem erstellt wurde. Die Android-Unterstützung in Node.js ist jedoch experimentell.
process.ppid#
- Typ:
<integer>
Die Eigenschaft process.ppid gibt die PID des Elternprozesses (Parent) des aktuellen Prozesses zurück.
import { ppid } from 'node:process'; console.log(`The parent process is pid ${ppid}`);const { ppid } = require('node:process'); console.log(`The parent process is pid ${ppid}`);
process.ref(maybeRefable)#
Stabilität: 1 - Experimentell
maybeRefable<any>Ein Objekt, das "referenzierbar" (refable) sein könnte.
Ein Objekt ist "referenzierbar", wenn es das Node.js "Refable-Protokoll" implementiert. Insbesondere bedeutet dies, dass das Objekt die Methoden Symbol.for('nodejs.ref') und Symbol.for('nodejs.unref') implementiert. "Referenzierte" Objekte halten die Node.js-Event-Loop am Leben, während "nicht-referenzierte" Objekte dies nicht tun. Historisch gesehen wurde dies durch die direkte Verwendung der Methoden ref() und unref() auf den Objekten implementiert. Dieses Muster wird jedoch zugunsten des "Refable-Protokolls" als veraltet eingestuft, um Web-Plattform-API-Typen besser zu unterstützen, deren APIs nicht geändert werden können, um ref()- und unref()-Methoden hinzuzufügen, die dieses Verhalten aber dennoch unterstützen müssen.
process.release#
- Typ:
<Object>
Die Eigenschaft process.release gibt ein Object zurück, das Metadaten zur aktuellen Version enthält, einschließlich URLs für das Quell-Tarball und das Header-only-Tarball.
process.release enthält die folgenden Eigenschaften:
name<string>Ein Wert, der immer'node'sein wird.sourceUrl<string>eine absolute URL, die auf eine.tar.gz-Datei zeigt, die den Quellcode der aktuellen Version enthält.headersUrl<string>eine absolute URL, die auf eine.tar.gz-Datei zeigt, die nur die Quell-Header-Dateien für die aktuelle Version enthält. Diese Datei ist wesentlich kleiner als die vollständige Quelldatei und kann zum Kompilieren von nativen Node.js-Add-ons verwendet werden.libUrl<string>|<undefined>eine absolute URL, die auf einenode.lib-Datei zeigt, die der Architektur und Version der aktuellen Version entspricht. Diese Datei wird zum Kompilieren von nativen Node.js-Add-ons verwendet. Diese Eigenschaft ist nur in Windows-Builds von Node.js vorhanden und fehlt auf allen anderen Plattformen.lts<string>|<undefined>ein String-Label, das das LTS-Label für diese Version identifiziert. Diese Eigenschaft existiert nur für LTS-Versionen und ist für alle anderen Arten von Versionenundefined, einschließlich Current-Releases. Gültige Werte beinhalten die LTS-Release-Codenamen (einschließlich derjenigen, die nicht mehr unterstützt werden).'Fermium'für die 14.x LTS-Reihe, beginnend mit 14.15.0.'Gallium'für die 16.x LTS-Reihe, beginnend mit 16.13.0.'Hydrogen'für die 18.x LTS-Reihe, beginnend mit 18.12.0. Für weitere LTS-Release-Codenamen siehe das Node.js Changelog-Archiv.
{
name: 'node',
lts: 'Hydrogen',
sourceUrl: 'https://nodejsorg.de/download/release/v18.12.0/node-v18.12.0.tar.gz',
headersUrl: 'https://nodejsorg.de/download/release/v18.12.0/node-v18.12.0-headers.tar.gz',
libUrl: 'https://nodejsorg.de/download/release/v18.12.0/win-x64/node.lib'
}
In benutzerdefinierten Builds aus Nicht-Release-Versionen des Quellbaums ist möglicherweise nur die name-Eigenschaft vorhanden. Man sollte sich nicht darauf verlassen, dass die zusätzlichen Eigenschaften vorhanden sind.
process.report#
- Typ:
<Object>
process.report ist ein Objekt, dessen Methoden verwendet werden, um Diagnoseberichte für den aktuellen Prozess zu erstellen. Zusätzliche Dokumentation finden Sie in der Bericht-Dokumentation.
process.report.compact#
- Typ:
<boolean>
Berichte in einem kompakten Format schreiben, einzeiliges JSON, das von Log-Verarbeitungssystemen leichter zu konsumieren ist als das standardmäßige mehrzeilige Format, das für den menschlichen Verzehr konzipiert ist.
import { report } from 'node:process'; console.log(`Reports are compact? ${report.compact}`);const { report } = require('node:process'); console.log(`Reports are compact? ${report.compact}`);
process.report.directory#
- Typ:
<string>
Verzeichnis, in das der Bericht geschrieben wird. Der Standardwert ist ein leerer String, was bedeutet, dass Berichte in das aktuelle Arbeitsverzeichnis des Node.js-Prozesses geschrieben werden.
import { report } from 'node:process'; console.log(`Report directory is ${report.directory}`);const { report } = require('node:process'); console.log(`Report directory is ${report.directory}`);
process.report.filename#
- Typ:
<string>
Dateiname, in den der Bericht geschrieben wird. Wenn er auf einen leeren String gesetzt wird, setzt sich der Ausgabedateiname aus einem Zeitstempel, der PID und einer Sequenznummer zusammen. Der Standardwert ist ein leerer String.
Wenn der Wert von process.report.filename auf 'stdout' oder 'stderr' gesetzt ist, wird der Bericht in den stdout bzw. stderr des Prozesses geschrieben.
import { report } from 'node:process'; console.log(`Report filename is ${report.filename}`);const { report } = require('node:process'); console.log(`Report filename is ${report.filename}`);
process.report.getReport([err])#
err<Error>Ein benutzerdefinierter Fehler, der für die Berichterstattung des JavaScript-Stacks verwendet wird.- Rückgabewert:
<Object>
Gibt eine JavaScript-Objektdarstellung eines Diagnoseberichts für den laufenden Prozess zurück. Der JavaScript-Stack-Trace des Berichts wird aus err entnommen, falls vorhanden.
import { report } from 'node:process'; import util from 'node:util'; const data = report.getReport(); console.log(data.header.nodejsVersion); // Similar to process.report.writeReport() import fs from 'node:fs'; fs.writeFileSync('my-report.log', util.inspect(data), 'utf8');const { report } = require('node:process'); const util = require('node:util'); const data = report.getReport(); console.log(data.header.nodejsVersion); // Similar to process.report.writeReport() const fs = require('node:fs'); fs.writeFileSync('my-report.log', util.inspect(data), 'utf8');
Zusätzliche Dokumentation finden Sie in der Bericht-Dokumentation.
process.report.reportOnFatalError#
- Typ:
<boolean>
Wenn true, wird bei fatalen Fehlern, wie z. B. Out-of-Memory-Fehlern oder fehlgeschlagenen C++-Assertions, ein Diagnosebericht generiert.
import { report } from 'node:process'; console.log(`Report on fatal error: ${report.reportOnFatalError}`);const { report } = require('node:process'); console.log(`Report on fatal error: ${report.reportOnFatalError}`);
process.report.reportOnSignal#
- Typ:
<boolean>
Wenn true, wird ein Diagnosebericht generiert, wenn der Prozess das durch process.report.signal angegebene Signal empfängt.
import { report } from 'node:process'; console.log(`Report on signal: ${report.reportOnSignal}`);const { report } = require('node:process'); console.log(`Report on signal: ${report.reportOnSignal}`);
process.report.reportOnUncaughtException#
- Typ:
<boolean>
Wenn true, wird ein Diagnosebericht bei einer nicht abgefangenen Ausnahme (uncaught exception) generiert.
import { report } from 'node:process'; console.log(`Report on exception: ${report.reportOnUncaughtException}`);const { report } = require('node:process'); console.log(`Report on exception: ${report.reportOnUncaughtException}`);
process.report.excludeEnv#
- Typ:
<boolean>
Wenn true, wird ein Diagnosebericht ohne die Umgebungsvariablen generiert.
process.report.signal#
- Typ:
<string>
Das Signal, das verwendet wird, um die Erstellung eines Diagnoseberichts auszulösen. Standardmäßig 'SIGUSR2'.
import { report } from 'node:process'; console.log(`Report signal: ${report.signal}`);const { report } = require('node:process'); console.log(`Report signal: ${report.signal}`);
process.report.writeReport([filename][, err])#
-
filename<string>Name der Datei, in die der Bericht geschrieben wird. Dies sollte ein relativer Pfad sein, der an das inprocess.report.directoryangegebene Verzeichnis oder, falls nicht spezifiziert, an das aktuelle Arbeitsverzeichnis des Node.js-Prozesses angehängt wird. -
err<Error>Ein benutzerdefinierter Fehler, der für die Berichterstattung des JavaScript-Stacks verwendet wird. -
Rückgabewert:
<string>Gibt den Dateinamen des generierten Berichts zurück.
Schreibt einen Diagnosebericht in eine Datei. Wenn filename nicht angegeben ist, enthält der Standard-Dateiname Datum, Uhrzeit, PID und eine Sequenznummer. Der JavaScript-Stack-Trace des Berichts wird aus err entnommen, falls vorhanden.
Wenn der Wert von filename auf 'stdout' oder 'stderr' gesetzt ist, wird der Bericht in den stdout bzw. stderr des Prozesses geschrieben.
import { report } from 'node:process'; report.writeReport();const { report } = require('node:process'); report.writeReport();
Zusätzliche Dokumentation finden Sie in der Bericht-Dokumentation.
process.resourceUsage()#
- Rückgabewert:
<Object>die Ressourcennutzung für den aktuellen Prozess. Alle diese Werte stammen vomuv_getrusage-Aufruf, der eineuv_rusage_t-Struktur zurückgibt.userCPUTime<integer>entsprichtru_utime, berechnet in Mikrosekunden. Es ist derselbe Wert wieprocess.cpuUsage().user.systemCPUTime<integer>entsprichtru_stime, berechnet in Mikrosekunden. Es ist derselbe Wert wieprocess.cpuUsage().system.maxRSS<integer>entsprichtru_maxrss, der maximalen Resident Set Size in Kibibytes (1024 Bytes).sharedMemorySize<integer>entsprichtru_ixrss, wird jedoch von keiner Plattform unterstützt.unsharedDataSize<integer>entsprichtru_idrss, wird jedoch von keiner Plattform unterstützt.unsharedStackSize<integer>entsprichtru_isrss, wird jedoch von keiner Plattform unterstützt.minorPageFault<integer>entsprichtru_minflt, der Anzahl der Minor-Page-Faults für den Prozess, siehe diesen Artikel für weitere Details.majorPageFault<integer>entsprichtru_majflt, der Anzahl der Major-Page-Faults für den Prozess, siehe diesen Artikel für weitere Details. Dieses Feld wird unter Windows nicht unterstützt.swappedOut<integer>entsprichtru_nswap, wird jedoch von keiner Plattform unterstützt.fsRead<integer>entsprichtru_inblock, der Anzahl der Male, die das Dateisystem Eingabeoperationen ausführen musste.fsWrite<integer>entsprichtru_oublock, der Anzahl der Male, die das Dateisystem Ausgabeoperationen ausführen musste.ipcSent<integer>entsprichtru_msgsnd, wird jedoch von keiner Plattform unterstützt.ipcReceived<integer>entsprichtru_msgrcv, wird jedoch von keiner Plattform unterstützt.signalsCount<integer>entsprichtru_nsignals, wird jedoch von keiner Plattform unterstützt.voluntaryContextSwitches<integer>entsprichtru_nvcsw, der Anzahl der Male, die ein CPU-Kontextwechsel stattfand, weil ein Prozess den Prozessor freiwillig vor Ablauf seiner Zeitspanne aufgegeben hat (normalerweise um auf die Verfügbarkeit einer Ressource zu warten). Dieses Feld wird unter Windows nicht unterstützt.involuntaryContextSwitches<integer>entsprichtru_nivcsw, der Anzahl der Male, die ein CPU-Kontextwechsel stattfand, weil ein Prozess mit höherer Priorität ausführbar wurde oder weil der aktuelle Prozess seine Zeitspanne überschritten hat. Dieses Feld wird unter Windows nicht unterstützt.
import { resourceUsage } from 'node:process'; console.log(resourceUsage()); /* Will output: { userCPUTime: 82872, systemCPUTime: 4143, maxRSS: 33164, sharedMemorySize: 0, unsharedDataSize: 0, unsharedStackSize: 0, minorPageFault: 2469, majorPageFault: 0, swappedOut: 0, fsRead: 0, fsWrite: 8, ipcSent: 0, ipcReceived: 0, signalsCount: 0, voluntaryContextSwitches: 79, involuntaryContextSwitches: 1 } */const { resourceUsage } = require('node:process'); console.log(resourceUsage()); /* Will output: { userCPUTime: 82872, systemCPUTime: 4143, maxRSS: 33164, sharedMemorySize: 0, unsharedDataSize: 0, unsharedStackSize: 0, minorPageFault: 2469, majorPageFault: 0, swappedOut: 0, fsRead: 0, fsWrite: 8, ipcSent: 0, ipcReceived: 0, signalsCount: 0, voluntaryContextSwitches: 79, involuntaryContextSwitches: 1 } */
process.send(message[, sendHandle[, options]][, callback])#
message<Object>sendHandle<net.Server>|<net.Socket>options<Object>zur Parametrisierung des Sendens bestimmter Arten von Handles.optionsunterstützt die folgenden Eigenschaften:keepOpen<boolean>Ein Wert, der beim Übergeben von Instanzen vonnet.Socketverwendet werden kann. Wenntrue, bleibt der Socket im sendenden Prozess offen. Standard:false.
callback<Function>- Rückgabewert:
<boolean>
Wenn Node.js mit einem IPC-Kanal gestartet wird, kann die Methode process.send() verwendet werden, um Nachrichten an den Elternprozess zu senden. Nachrichten werden als 'message'-Ereignis auf dem ChildProcess-Objekt des Elternprozesses empfangen.
Wenn Node.js nicht mit einem IPC-Kanal gestartet wurde, ist process.send undefined.
Die Nachricht durchläuft Serialisierung und Parsing. Die resultierende Nachricht ist möglicherweise nicht identisch mit der ursprünglich gesendeten.
process.setegid(id)#
Die Methode process.setegid() setzt die effektive Gruppenidentität des Prozesses. (Siehe setegid(2).) Die id kann entweder als numerische ID oder als Gruppenname-String übergeben werden. Wenn ein Gruppenname angegeben ist, blockiert diese Methode während der Auflösung der zugehörigen numerischen ID.
import process from 'node:process'; if (process.getegid && process.setegid) { console.log(`Current gid: ${process.getegid()}`); try { process.setegid(501); console.log(`New gid: ${process.getegid()}`); } catch (err) { console.error(`Failed to set gid: ${err}`); } }const process = require('node:process'); if (process.getegid && process.setegid) { console.log(`Current gid: ${process.getegid()}`); try { process.setegid(501); console.log(`New gid: ${process.getegid()}`); } catch (err) { console.error(`Failed to set gid: ${err}`); } }
Diese Funktion ist nur auf POSIX-Plattformen verfügbar (d. h. nicht unter Windows oder Android). Dieses Feature ist in Worker-Threads nicht verfügbar.
process.seteuid(id)#
Die Methode process.seteuid() setzt die effektive Benutzeridentität des Prozesses. (Siehe seteuid(2).) Die id kann entweder als numerische ID oder als Benutzername-String übergeben werden. Wenn ein Benutzername angegeben ist, blockiert die Methode während der Auflösung der zugehörigen numerischen ID.
import process from 'node:process'; if (process.geteuid && process.seteuid) { console.log(`Current uid: ${process.geteuid()}`); try { process.seteuid(501); console.log(`New uid: ${process.geteuid()}`); } catch (err) { console.error(`Failed to set uid: ${err}`); } }const process = require('node:process'); if (process.geteuid && process.seteuid) { console.log(`Current uid: ${process.geteuid()}`); try { process.seteuid(501); console.log(`New uid: ${process.geteuid()}`); } catch (err) { console.error(`Failed to set uid: ${err}`); } }
Diese Funktion ist nur auf POSIX-Plattformen verfügbar (d. h. nicht unter Windows oder Android). Dieses Feature ist in Worker-Threads nicht verfügbar.
process.setgid(id)#
Die Methode process.setgid() setzt die Gruppenidentität des Prozesses. (Siehe setgid(2).) Die id kann entweder als numerische ID oder als Gruppenname-String übergeben werden. Wenn ein Gruppenname angegeben ist, blockiert diese Methode während der Auflösung der zugehörigen numerischen ID.
import process from 'node:process'; if (process.getgid && process.setgid) { console.log(`Current gid: ${process.getgid()}`); try { process.setgid(501); console.log(`New gid: ${process.getgid()}`); } catch (err) { console.error(`Failed to set gid: ${err}`); } }const process = require('node:process'); if (process.getgid && process.setgid) { console.log(`Current gid: ${process.getgid()}`); try { process.setgid(501); console.log(`New gid: ${process.getgid()}`); } catch (err) { console.error(`Failed to set gid: ${err}`); } }
Diese Funktion ist nur auf POSIX-Plattformen verfügbar (d. h. nicht unter Windows oder Android). Dieses Feature ist in Worker-Threads nicht verfügbar.
process.setgroups(groups)#
groups<integer[]>
Die Methode process.setgroups() setzt die ergänzenden Gruppen-IDs für den Node.js-Prozess. Dies ist eine privilegierte Operation, die erfordert, dass der Node.js-Prozess über root oder die CAP_SETGID-Fähigkeit verfügt.
Das groups-Array kann numerische Gruppen-IDs, Gruppennamen oder beides enthalten.
import process from 'node:process'; if (process.getgroups && process.setgroups) { try { process.setgroups([501]); console.log(process.getgroups()); // new groups } catch (err) { console.error(`Failed to set groups: ${err}`); } }const process = require('node:process'); if (process.getgroups && process.setgroups) { try { process.setgroups([501]); console.log(process.getgroups()); // new groups } catch (err) { console.error(`Failed to set groups: ${err}`); } }
Diese Funktion ist nur auf POSIX-Plattformen verfügbar (d. h. nicht unter Windows oder Android). Dieses Feature ist in Worker-Threads nicht verfügbar.
process.setuid(id)#
Die Methode process.setuid(id) setzt die Benutzeridentität des Prozesses. (Siehe setuid(2).) Die id kann entweder als numerische ID oder als Benutzername-String übergeben werden. Wenn ein Benutzername angegeben ist, blockiert die Methode während der Auflösung der zugehörigen numerischen ID.
import process from 'node:process'; if (process.getuid && process.setuid) { console.log(`Current uid: ${process.getuid()}`); try { process.setuid(501); console.log(`New uid: ${process.getuid()}`); } catch (err) { console.error(`Failed to set uid: ${err}`); } }const process = require('node:process'); if (process.getuid && process.setuid) { console.log(`Current uid: ${process.getuid()}`); try { process.setuid(501); console.log(`New uid: ${process.getuid()}`); } catch (err) { console.error(`Failed to set uid: ${err}`); } }
Diese Funktion ist nur auf POSIX-Plattformen verfügbar (d. h. nicht unter Windows oder Android). Dieses Feature ist in Worker-Threads nicht verfügbar.
process.setSourceMapsEnabled(val)#
Stabilität: 1 - Experimentell: Verwenden Sie stattdessen module.setSourceMapsSupport().
val<boolean>
Diese Funktion aktiviert oder deaktiviert die Source Map-Unterstützung für Stack-Traces.
Sie bietet dieselben Funktionen wie das Starten des Node.js-Prozesses mit der Befehlszeilenoption --enable-source-maps.
Nur Source Maps in JavaScript-Dateien, die geladen werden, nachdem Source Maps aktiviert wurden, werden geparst und geladen.
Dies impliziert den Aufruf von module.setSourceMapsSupport() mit der Option { nodeModules: true, generatedCode: true }.
process.setUncaughtExceptionCaptureCallback(fn)#
fn<Function>|<null>
Die Funktion process.setUncaughtExceptionCaptureCallback() setzt eine Funktion, die aufgerufen wird, wenn eine nicht abgefangene Ausnahme auftritt. Sie erhält den Ausnahme-Wert als erstes Argument.
Wenn eine solche Funktion gesetzt ist, wird das Ereignis 'uncaughtException' nicht emittiert. Wenn --abort-on-uncaught-exception über die Befehlszeile oder durch v8.setFlagsFromString() gesetzt wurde, wird der Prozess nicht abgebrochen. Aktionen, die bei Ausnahmen stattfinden sollen (wie die Berichterstellung), sind ebenfalls betroffen.
Um die Capture-Funktion aufzuheben, kann process.setUncaughtExceptionCaptureCallback(null) verwendet werden. Der Aufruf dieser Methode mit einem Nicht-null-Argument, während eine andere Capture-Funktion gesetzt ist, führt zu einem Fehler.
Um mehrere Callbacks zu registrieren, die koexistieren können, verwenden Sie stattdessen process.addUncaughtExceptionCaptureCallback().
process.sourceMapsEnabled#
Stabilität: 1 - Experimentell: Verwenden Sie stattdessen module.getSourceMapsSupport().
- Typ:
<boolean>
Die Eigenschaft process.sourceMapsEnabled gibt an, ob die Source Map-Unterstützung für Stack-Traces aktiviert ist.
process.stderr#
- Typ:
<Stream>
Die Eigenschaft process.stderr gibt einen Stream zurück, der mit stderr (fd 2) verbunden ist. Es handelt sich um ein net.Socket (ein Duplex-Stream), es sei denn, fd 2 verweist auf eine Datei; in diesem Fall ist es ein Writable-Stream.
process.stderr unterscheidet sich in wichtigen Punkten von anderen Node.js-Streams. Siehe Hinweis zum Prozess-I/O für weitere Informationen.
process.stderr.fd#
- Typ:
<number>
Diese Eigenschaft bezieht sich auf den Wert des zugrunde liegenden Dateideskriptors von process.stderr. Der Wert ist fest auf 2 eingestellt. In Worker-Threads existiert dieses Feld nicht.
process.stdin#
- Typ:
<Stream>
Die Eigenschaft process.stdin gibt einen Stream zurück, der mit stdin (fd 0) verbunden ist. Es handelt sich um ein net.Socket (ein Duplex-Stream), es sei denn, fd 0 verweist auf eine Datei; in diesem Fall ist es ein Readable-Stream.
Details zum Lesen von stdin finden Sie unter readable.read().
Als Duplex-Stream kann process.stdin auch im "alten" Modus verwendet werden, der kompatibel mit Skripten ist, die für Node.js vor Version 0.10 geschrieben wurden. Weitere Informationen finden Sie unter Stream-Kompatibilität.
Im "alten" Stream-Modus ist der stdin-Stream standardmäßig pausiert, man muss also process.stdin.resume() aufrufen, um daraus zu lesen. Beachten Sie, dass der Aufruf von process.stdin.resume() selbst den Stream in den "alten" Modus schaltet.
process.stdin.fd#
- Typ:
<number>
Diese Eigenschaft bezieht sich auf den Wert des zugrunde liegenden Dateideskriptors von process.stdin. Der Wert ist fest auf 0 eingestellt. In Worker-Threads existiert dieses Feld nicht.
process.stdout#
- Typ:
<Stream>
Die Eigenschaft process.stdout gibt einen Stream zurück, der mit stdout (fd 1) verbunden ist. Es handelt sich um ein net.Socket (ein Duplex-Stream), es sei denn, fd 1 verweist auf eine Datei; in diesem Fall ist es ein Writable-Stream.
Zum Beispiel, um process.stdin nach process.stdout zu kopieren:
import { stdin, stdout } from 'node:process'; stdin.pipe(stdout);const { stdin, stdout } = require('node:process'); stdin.pipe(stdout);
process.stdout unterscheidet sich in wichtigen Punkten von anderen Node.js-Streams. Siehe Hinweis zum Prozess-I/O für weitere Informationen.
process.stdout.fd#
- Typ:
<number>
Diese Eigenschaft bezieht sich auf den Wert des zugrunde liegenden Dateideskriptors von process.stdout. Der Wert ist fest auf 1 eingestellt. In Worker-Threads existiert dieses Feld nicht.
Ein Hinweis zum Prozess-I/O#
process.stdout und process.stderr unterscheiden sich in wichtigen Punkten von anderen Node.js-Streams:
- Sie werden intern von
console.log()bzw.console.error()verwendet. - Schreibvorgänge können synchron sein, je nachdem, womit der Stream verbunden ist und ob das System Windows oder POSIX ist:
- Dateien: synchron unter Windows und POSIX
- TTYs (Terminals): asynchron unter Windows, synchron unter POSIX
- Pipes (und Sockets): synchron unter Windows, asynchron unter POSIX
Diese Verhaltensweisen sind teilweise aus historischen Gründen vorhanden, da eine Änderung zu Rückwärtsinkompatibilität führen würde, aber sie werden auch von einigen Benutzern erwartet.
Synchrone Schreibvorgänge vermeiden Probleme wie die unerwartete Verschachtelung von Ausgaben von console.log() oder console.error(), oder dass sie gar nicht geschrieben werden, falls process.exit() vor Abschluss eines asynchronen Schreibvorgangs aufgerufen wird. Siehe process.exit() für weitere Informationen.
Warnung: Synchrone Schreibvorgänge blockieren die Event-Loop, bis der Schreibvorgang abgeschlossen ist. Dies kann bei Ausgaben in eine Datei nahezu augenblicklich geschehen, aber bei hoher Systemlast, bei Pipes, die am empfangenden Ende nicht gelesen werden, oder bei langsamen Terminals oder Dateisystemen ist es möglich, dass die Event-Loop häufig genug und lange genug blockiert wird, um schwerwiegende negative Leistungsauswirkungen zu haben. Dies ist beim Schreiben in eine interaktive Terminalsitzung möglicherweise kein Problem, aber bedenken Sie dies besonders sorgfältig bei der Protokollierung in Produktionsumgebungen über die Prozessausgabestreams.
Um zu prüfen, ob ein Stream mit einem TTY-Kontext verbunden ist, prüfen Sie die Eigenschaft isTTY.
Zum Beispiel:
$ node -p "Boolean(process.stdin.isTTY)"
true
$ echo "foo" | node -p "Boolean(process.stdin.isTTY)"
false
$ node -p "Boolean(process.stdout.isTTY)"
true
$ node -p "Boolean(process.stdout.isTTY)" | cat
false
Weitere Informationen finden Sie in der TTY-Dokumentation.
process.throwDeprecation#
- Typ:
<boolean>
Der Anfangswert von process.throwDeprecation gibt an, ob das Flag --throw-deprecation im aktuellen Node.js-Prozess gesetzt ist. process.throwDeprecation ist veränderbar, sodass die Entscheidung, ob Deprecation-Warnungen zu Fehlern führen, zur Laufzeit geändert werden kann. Weitere Informationen finden Sie in der Dokumentation zum 'warning'-Ereignis und der emitWarning()-Methode.
$ node --throw-deprecation -p "process.throwDeprecation"
true
$ node -p "process.throwDeprecation"
undefined
$ node
> process.emitWarning('test', 'DeprecationWarning');
undefined
> (node:26598) DeprecationWarning: test
> process.throwDeprecation = true;
true
> process.emitWarning('test', 'DeprecationWarning');
Thrown:
[DeprecationWarning: test] { name: 'DeprecationWarning' }
process.threadCpuUsage([previousValue])#
previousValue<Object>Ein vorheriger Rückgabewert eines Aufrufs vonprocess.threadCpuUsage()- Rückgabewert:
<Object>
Die Methode process.threadCpuUsage() gibt die CPU-Zeitnutzung (Benutzer- und Systemzeit) des aktuellen Worker-Threads in einem Objekt mit den Eigenschaften user und system zurück, wobei die Werte in Mikrosekunden (millionstel Sekunde) angegeben sind.
Das Ergebnis eines vorherigen Aufrufs von process.threadCpuUsage() kann als Argument an die Funktion übergeben werden, um eine Differenzmessung zu erhalten.
process.title#
- Typ:
<string>
Die Eigenschaft process.title gibt den aktuellen Prozesstitel zurück (d. h. den aktuellen Wert von ps). Das Zuweisen eines neuen Werts zu process.title ändert den aktuellen Wert von ps.
Wenn ein neuer Wert zugewiesen wird, legen verschiedene Plattformen unterschiedliche maximale Längenbeschränkungen für den Titel fest. Normalerweise sind solche Beschränkungen ziemlich begrenzt. Zum Beispiel ist process.title unter Linux und macOS auf die Größe des Binary-Namens plus die Länge der Befehlszeilenargumente begrenzt, da das Setzen von process.title den argv-Speicher des Prozesses überschreibt. Node.js 0.8 erlaubte längere Prozesstitel-Strings, indem auch der environ-Speicher überschrieben wurde, was jedoch in einigen (eher obskuren) Fällen potenziell unsicher und verwirrend war.
Das Zuweisen eines Werts zu process.title führt möglicherweise nicht zu einer genauen Bezeichnung in Prozessmanager-Anwendungen wie der macOS-Aktivitätsanzeige oder dem Windows-Dienstemanager.
process.traceDeprecation#
- Typ:
<boolean>
Die Eigenschaft process.traceDeprecation gibt an, ob das Flag --trace-deprecation im aktuellen Node.js-Prozess gesetzt ist. Weitere Informationen zum Verhalten dieses Flags finden Sie in der Dokumentation zum 'warning'-Ereignis und der emitWarning()-Methode.
process.traceProcessWarnings#
Die Eigenschaft process.traceProcessWarnings gibt an, ob das Flag --trace-warnings im aktuellen Node.js-Prozess gesetzt ist. Diese Eigenschaft ermöglicht die programmgesteuerte Kontrolle über die Verfolgung von Warnungen und ermöglicht das Aktivieren oder Deaktivieren von Stack-Traces für Warnungen zur Laufzeit.
// Enable trace warnings
process.traceProcessWarnings = true;
// Emit a warning with a stack trace
process.emitWarning('Warning with stack trace');
// Disable trace warnings
process.traceProcessWarnings = false;
process.umask()#
Stabilität: 0 - Veraltet. Der Aufruf von process.umask() ohne Argumente bewirkt, dass die prozessweite umask zweimal geschrieben wird. Dies führt zu einer Race-Condition zwischen Threads und ist eine potenzielle Sicherheitslücke. Es gibt keine sichere, plattformübergreifende alternative API.
process.umask() gibt die Dateimodus-Erstellungsmaske des Node.js-Prozesses zurück. Kindprozesse erben die Maske vom Elternprozess.
process.umask(mask)#
process.umask(mask) setzt die Dateimodus-Erstellungsmaske des Node.js-Prozesses. Kindprozesse erben die Maske vom Elternprozess. Gibt die vorherige Maske zurück.
import { umask } from 'node:process'; const newmask = 0o022; const oldmask = umask(newmask); console.log( `Changed umask from ${oldmask.toString(8)} to ${newmask.toString(8)}`, );const { umask } = require('node:process'); const newmask = 0o022; const oldmask = umask(newmask); console.log( `Changed umask from ${oldmask.toString(8)} to ${newmask.toString(8)}`, );
In Worker-Threads löst process.umask(mask) eine Ausnahme aus.
process.unref(maybeRefable)#
Stabilität: 1 - Experimentell
maybeRefable<any>Ein Objekt, das "nicht-referenzierbar" gemacht werden könnte.
Ein Objekt ist "nicht-referenzierbar" (unrefable), wenn es das Node.js "Refable-Protokoll" implementiert. Insbesondere bedeutet dies, dass das Objekt die Methoden Symbol.for('nodejs.ref') und Symbol.for('nodejs.unref') implementiert. "Referenzierte" Objekte halten die Node.js-Event-Loop am Leben, während "nicht-referenzierte" Objekte dies nicht tun. Historisch gesehen wurde dies durch die direkte Verwendung der Methoden ref() und unref() auf den Objekten implementiert. Dieses Muster wird jedoch zugunsten des "Refable-Protokolls" als veraltet eingestuft, um Web-Plattform-API-Typen besser zu unterstützen, deren APIs nicht geändert werden können, um ref()- und unref()-Methoden hinzuzufügen, die dieses Verhalten aber dennoch unterstützen müssen.
process.uptime()#
- Gibt zurück:
<number>
Die Methode process.uptime() gibt die Anzahl der Sekunden zurück, die der aktuelle Node.js-Prozess bereits läuft.
Der Rückgabewert enthält Bruchteile einer Sekunde. Verwenden Sie Math.floor(), um ganze Sekunden zu erhalten.
process.version#
- Typ:
<string>
Die Eigenschaft process.version enthält den Node.js-Versionsstring.
import { version } from 'node:process'; console.log(`Version: ${version}`); // Version: v14.8.0const { version } = require('node:process'); console.log(`Version: ${version}`); // Version: v14.8.0
Um den Versionsstring ohne das vorangestellte v zu erhalten, verwenden Sie process.versions.node.
process.versions#
- Typ:
<Object>
Die Eigenschaft process.versions gibt ein Objekt zurück, das die Versionsstrings von Node.js und seinen Abhängigkeiten auflistet. process.versions.modules gibt die aktuelle ABI-Version an, die erhöht wird, wann immer sich eine C++-API ändert. Node.js verweigert das Laden von Modulen, die gegen eine andere Modul-ABI-Version kompiliert wurden.
import { versions } from 'node:process'; console.log(versions);const { versions } = require('node:process'); console.log(versions);
Generiert ein Objekt ähnlich diesem:
{ node: '26.0.0-pre',
acorn: '8.15.0',
ada: '3.4.1',
amaro: '1.1.5',
ares: '1.34.6',
brotli: '1.2.0',
merve: '1.0.0',
cldr: '48.0',
icu: '78.2',
llhttp: '9.3.0',
modules: '144',
napi: '10',
nbytes: '0.1.1',
ncrypto: '0.0.1',
nghttp2: '1.68.0',
nghttp3: '',
ngtcp2: '',
openssl: '3.5.4',
simdjson: '4.2.4',
simdutf: '7.3.3',
sqlite: '3.51.2',
tz: '2025c',
undici: '7.18.2',
unicode: '17.0',
uv: '1.51.0',
uvwasi: '0.0.23',
v8: '14.3.127.18-node.10',
zlib: '1.3.1-e00f703',
zstd: '1.5.7' }
Exit-Codes#
Node.js beendet sich normalerweise mit einem Statuscode von 0, wenn keine asynchronen Operationen mehr anstehen. In anderen Fällen werden die folgenden Statuscodes verwendet:
1Nicht abgefangene fatale Ausnahme: Es gab eine nicht abgefangene Ausnahme, die nicht von einer Domain oder einem'uncaughtException'-Event-Handler behandelt wurde.2: Ungenutzt (von Bash für Fehlbenutzung eingebauter Funktionen reserviert)3Interner JavaScript-Parsing-Fehler: Der interne JavaScript-Quellcode im Node.js-Bootstrapping-Prozess verursachte einen Parsing-Fehler. Dies ist extrem selten und kann im Allgemeinen nur während der Entwicklung von Node.js selbst auftreten.4Internes JavaScript-Evaluierungsfehler: Der interne JavaScript-Quellcode im Node.js-Bootstrapping-Prozess konnte bei der Evaluierung keinen Funktionswert zurückgeben. Dies ist extrem selten und kann im Allgemeinen nur während der Entwicklung von Node.js selbst auftreten.5Fataler Fehler: Es gab einen fatalen, nicht behebbaren Fehler in V8. Normalerweise wird eine Meldung mit dem PräfixFATAL ERRORauf stderr ausgegeben.6Interner Ausnahme-Handler keine Funktion: Es gab eine nicht abgefangene Ausnahme, aber die interne fatale Ausnahme-Handler-Funktion wurde irgendwie auf einen Nicht-Funktionswert gesetzt und konnte nicht aufgerufen werden.7Interner Ausnahme-Handler Laufzeitfehler: Es gab eine nicht abgefangene Ausnahme, und die interne fatale Ausnahme-Handler-Funktion selbst hat beim Versuch, sie zu behandeln, einen Fehler geworfen. Dies kann beispielsweise passieren, wenn ein'uncaughtException'- oderdomain.on('error')-Handler einen Fehler wirft.8: Ungenutzt. In früheren Versionen von Node.js deutete der Exit-Code 8 manchmal auf eine nicht abgefangene Ausnahme hin.9Ungültiges Argument: Entweder wurde eine unbekannte Option angegeben, oder eine Option, die einen Wert erfordert, wurde ohne Wert bereitgestellt.10Interner JavaScript-Laufzeitfehler: Der interne JavaScript-Quellcode im Node.js-Bootstrapping-Prozess warf einen Fehler, als die Bootstrapping-Funktion aufgerufen wurde. Dies ist extrem selten und kann im Allgemeinen nur während der Entwicklung von Node.js selbst auftreten.12Ungültiges Debug-Argument: Die Optionen--inspectund/oder--inspect-brkwurden gesetzt, aber die gewählte Portnummer war ungültig oder nicht verfügbar.13Nicht aufgelöstes Top-Level-Await:awaitwurde außerhalb einer Funktion im Top-Level-Code verwendet, aber das übergebenePromisewurde nie aufgelöst.14Snapshot-Fehler: Node.js wurde gestartet, um einen V8-Startup-Snapshot zu erstellen, und es schlug fehl, weil bestimmte Anforderungen an den Zustand der Anwendung nicht erfüllt wurden.>128Signal-Exits: Wenn Node.js ein fatales Signal wieSIGKILLoderSIGHUPempfängt, ist sein Exit-Code128plus der Wert des Signal-Codes. Dies ist eine Standardpraxis unter POSIX, da Exit-Codes als 7-Bit-Ganzzahlen definiert sind und Signal-Exits das höchstwertige Bit setzen und dann den Wert des Signal-Codes enthalten. Beispiel: SignalSIGABRThat den Wert6, daher ist der erwartete Exit-Code128+6=134.