So erstellen Sie untergeordnete Prozesse in Node.js

So Erstellen Sie Untergeordnete Prozesse In Node Js



Beim Programmieren in „ node.js „Ein einzelner Prozess ist niemals effizient, um die zunehmende Arbeitslast der Anwendung zu bewältigen. Daher kann es bestimmte Situationen geben, in denen der Entwickler neue Prozesse erstellen, mit langfristigen Aufgaben arbeiten und die Interaktion mit dem Betriebssystem ermöglichen muss. Dies kann erreicht werden, indem untergeordnete Prozesse erstellt werden, um mehrere Prozesse zu nutzen und so eine Node-Anwendung zu skalieren.

In diesem Artikel wird der unten aufgeführte Inhalt erläutert:







Was ist ein untergeordneter Prozess?

Ein untergeordneter Prozess entspricht einem Prozess, der über einen anderen Prozess, d. h. einen übergeordneten Prozess, erstellt wurde. Node.js bietet die „ child_process ”-Modul, das die effektive Kommunikation zwischen den untergeordneten Prozessen gewährleistet. Außerdem hilft dieses Modul beim Aufrufen der Betriebssystemfunktionen, indem es beliebige Systembefehle innerhalb eines untergeordneten Prozesses ausführt.



Wie erstelle ich untergeordnete Prozesse in Node.js?

Das Kind verarbeitet in „ node.js „kann über die unten aufgeführten Ansätze erstellt werden:



  • laichen() ' Methode.
  • Gabel() ' Methode.
  • exec() ' Methode.
  • execFile() ' Methode.

Ansatz 1: Untergeordnete Prozesse in node.js über die Methode „spawn()“ erstellen

Der ' laichen() Die Methode generiert ein Cmdlet in einem neuen Prozess unter Verwendung des bereitgestellten Cmdlets und der Befehlszeilenargumente. Die ChildProcess-Instanz wendet/implementiert die EventEmitter-API, die die Registrierung von Handlern für Ereignisse auf untergeordneten Objekten ermöglicht. Zu diesen Ereignissen gehören Exit, Disconnect, Error, Message und Close.





Syntax

child_process. laichen ( Cmdlet [ , args ] [ , Optionen ] )

In dieser Syntax:



  • Cmdlet: Es benötigt eine Zeichenfolge, die das auszuführende Cmdlet darstellt.
  • Argumente: Es bezieht sich auf die Liste der String-Argumente. Der Standardwert ist ein Null-Array.
  • Der ' Optionen „kann eine „Shell“ sein, die einen booleschen Wert annimmt. Es ist so, dass, wenn es „ist“ WAHR “, wird das Cmdlet aus der Shell heraus ausgeführt. Der Standardwert ist „ FALSCH ” was keine Shell impliziert. Standardmäßig, ' laichen() „erstellt/generiert keine Shell zum Ausführen des Cmdlets. Daher ist es wichtig, es beim Zugriff auf den untergeordneten Prozess als „Option“ zu übergeben.

Rückgabewert: Diese Methode ruft ein ChildProcess-Objekt ab.

Im Folgenden wird die Erstellung eines untergeordneten Prozesses demonstriert:

const { laichen } = erfordern ( 'child_process' ) ;

const Kind = laichen ( 'Du' , [ 'D: \S ETUPS' ] , { Hülse : WAHR } ) ;

Kind. stdout . An ( 'Daten' , ( Daten ) => {

Konsole. Protokoll ( `stdout : $ { Daten } ` ) ;

} ) ;

Kind. stderr . An ( 'Daten' , ( Daten ) => {

Konsole. Fehler ( `stderr : $ { Daten } ` ) ;

} ) ;

Kind. An ( 'schließen' , ( Code ) => {

Konsole. Protokoll ( „Der untergeordnete Prozess wurde mit dem Code $ beendet { Code } ` ) ;

} ) ;

In diesem Codeblock:

  • Fügen Sie zunächst Folgendes ein: child_process ”-Modul zum Erstellen eines untergeordneten Prozesses.
  • Anschließend wird ein untergeordneter Prozess zum Anzeigen des Inhalts im angegebenen Pfad erstellt, z. B. „ D:\SETUPS “.
  • Schließlich ist das „ schließen Das Ereignis „wird aufgerufen, wenn der gesamte untergeordnete Prozess beendet wird und die Beendigungsmeldung auf der Konsole angezeigt wird.

Ausgabe

Führen Sie hier das folgende Cmdlet aus, um den Code auszuführen und den Inhalt im Zielpfad anzuzeigen:

Knotentemp. js

Ansatz 2: Untergeordnete Prozesse in node.js mit der Methode „fork()“ erstellen

Diese Methode ist mit der „ laichen() ”-Methode, bei der die Kommunikation zwischen den untergeordneten und übergeordneten Prozessen über die „ schicken() ' Methode.

Der ' Gabel() Die Methode trennt die komplexen Berechnungsaufgaben von der Ereignisschleife (Haupt). Diese Methode kann für den Zugriff auf mehrere untergeordnete Prozesse verwendet werden, kann sich jedoch auf die Gesamtleistung auswirken, da jeder Prozess über einen eigenen Speicher verfügt.

Syntax

child_process. Gabel ( mdpath [ , args ] [ , Optionen ] )

Nach dieser Syntax:

  • mdpath „nimmt eine Zeichenfolge, die das Modul darstellt, das im untergeordneten Element ausgeführt werden soll.
  • args „bezieht sich auf eine Liste mit String-Argumenten.
  • Optionen „kann „execPath“, „env“, „CWD“, „tached“ und „execArgv“ sein.

Rückgabewert: Diese Methode ruft eine ChildProcess-Instanz ab.

Code (übergeordneter Prozess)

Gehen Sie nun den unten angegebenen Codeblock durch, der die Kommunikation zwischen den übergeordneten und untergeordneten Prozessen mithilfe des „ schicken() ' Methode:

const vgl = erfordern ( 'child_process' ) ;

Kind lassen = vgl. Gabel ( __Verzeichnisname + '/fork2.js' ) ;

Kind. An ( 'Nachricht' , Funktion ( X ) {

Konsole. Protokoll ( 'Übergeordneter Prozess hat:' , X ) ;

} ) ;

Kind. schicken ( { Hallo : 'vom übergeordneten Prozess' } ) ;

Kind. An ( 'schließen' , ( Code ) => {

Konsole. Protokoll ( „Der untergeordnete Prozess wurde mit dem Code $ beendet { Code } ` ) ;

} ) ;

In diesem Code:

  • Integrieren Sie ebenfalls das „ child_process ”-Modul zum Erstellen eines untergeordneten Prozesses.
  • Geben Sie nun den Pfad des untergeordneten Prozesses über die Schaltfläche „ Gabel() ' Methode.
  • Zeigen Sie abschließend die Meldung an, die den übergeordneten Prozess darstellt, über die Schaltfläche „ schicken() ”-Methode und zeigen Sie die aufgetretenen Fehler an, falls vorhanden.

Code (untergeordneter Prozess)

Die folgende Codedatei, d. h. „ fork2.js „ stellt den untergeordneten Prozess dar, der auch die Nachricht unter Verwendung der „ schicken() ”-Methode wie folgt:

Verfahren. An ( 'Nachricht' , Funktion ( M ) {

Konsole. Protokoll ( 'Untergeordneter Prozess hat:' , M ) ;

} ) ;

Verfahren. schicken ( { Hallo : 'vom untergeordneten Prozess' } ) ;

Ausgabe

Führen Sie nun das unten angegebene Cmdlet aus, um den Code auszuführen:

Knoten Forkchild. js

Anhand dieser Ausgabe wird bestätigt, dass die Eltern-Kind-Prozesskommunikation ordnungsgemäß durchgeführt wird.

Ansatz 3: Untergeordnete Prozesse in node.js mit der Methode „exec()“ erstellen

Der ' exec() Die Methode erstellt zunächst eine Shell und führt dann das Cmdlet aus. Diese Methode wird verwendet, um die gesamten Verzeichnisse abzurufen.

Syntax

child_process. Geschäftsführer ( Cmdlet [ , Optionen ] [ , Ruf zurück ] )

In der angegebenen Syntax:

  • Cmdlet „nimmt eine Zeichenfolge an, die den auszuführenden Befehl mit durch Leerzeichen getrennten Argumenten darstellt.
  • Der ' Optionen Dazu gehören „cwd“, „encoding“, „shell“ usw.
  • Der ' Ruf zurück Die Funktion wird aufgerufen, wenn der Prozess/die Operation endet.

Rückgabewert

Diese Methode ruft eine ChildProcess-Instanz ab.

Fahren Sie nun mit dem Code fort, der die Anzahl der Verzeichnisse auflistet:

const { Geschäftsführer } = erfordern ( 'child_process' ) ;
Geschäftsführer ( 'dir | find /c /v ''' , ( Fehler, stdout, stderr ) => {
Wenn ( Fehler ) {
Konsole. Fehler ( `exec-Fehler : $ { Fehler } ` ) ;
zurückkehren ;
}
Konsole. Protokoll ( `stdout : Nummer von Verzeichnissen -> $ { stdout } ` ) ;
Wenn ( stderr != „“ )
Konsole. Fehler ( `stderr : $ { stderr } ` ) ;
} ) ;

Fügen Sie in diesem Codeausschnitt das „ child_process ”-Modul zum Erstellen/Erstellen untergeordneter Prozesse. Behandeln Sie anschließend die aufgetretenen Ausnahmen/Fehler und zeigen Sie die Gesamtzahl der Verzeichnisse im aktuellen Arbeitsverzeichnis an.

Ausgabe

Führen Sie den folgenden Code aus, um den Code auszuführen:

Knoten execchild. js

In dieser Ausgabe kann impliziert werden, dass die Gesamtzahl der Verzeichnisse im aktuellen Arbeitsverzeichnis angezeigt wird.

Ansatz 4: Untergeordnete Prozesse in node.js mit der Methode execFile() erstellen

Im ' execFile() „-Methode wird die ausführbare Zieldatei direkt in Form eines neuen Prozesses erzeugt und ist daher effizienter als die „ exec() ' Methode. Diese Methode erzeugt das erstellte „ execchild.js ”-Datei in Form eines neuen Prozesses.

Syntax

child_process. execFile ( Dateiname [ , args ] [ , Optionen ] [ , Ruf zurück ] )

In der angegebenen Syntax:

  • Dateiname „nimmt eine Zeichenfolge entgegen, die den Namen oder Pfad der auszuführenden Datei darstellt.
  • args „entspricht der Liste der String-Argumente.
  • Der ' Optionen Dazu gehören „cwd“, „encoding“, „shell“ usw.
  • Der ' Ruf zurück Die Funktion wird aufgerufen, wenn der Prozess endet. Die Funktionsargumente können Fehler, Standardausgabe usw. sein.

Rückgabewert

Diese Methode ruft auch eine ChildProcess-Instanz ab.

Betrachten Sie nun den folgenden Code, der die ausführbare Zieldatei als neuen Prozess erzeugt:

const { execFile } = erfordern ( 'child_process' ) ;
const X = execFile ( 'Knoten' , [ 'execchild.js' ] ,
( Fehler, stdout, stderr ) => {
Wenn ( Fehler ) {
werfen Fehler ;
}
Konsole. Protokoll ( stdout ) ;
} ) ;

Führen Sie basierend auf diesen Codezeilen die folgenden Schritte aus:

  • Wiederholen Sie den besprochenen Vorgang zum Einbinden des „ child_process ” Modul.
  • Wenden Sie im nächsten Schritt das „ execFile() ”-Methode, die die angegebene ausführbare Datei (im vorherigen Ansatz besprochen) als neuen Prozess erzeugt und dadurch die gesamten Verzeichnisse im Arbeitsverzeichnis auflistet.

Ausgabe

Führen Sie das folgende Cmdlet aus, um den Code auszuführen:

Knoten-Exec-Datei. js

In diesem Ergebnis kann überprüft werden, ob die angegebene ausführbare Datei erzeugt wurde, und die Anzahl der Verzeichnisse wird angezeigt.

Abschluss

Die untergeordneten Prozesse in Node.js können über den „ laichen() ” Methode, die „ Gabel() ” Methode, die „ exec() ”-Methode oder die „ execFile() ' Methode. Diese Ansätze erzeugen den untergeordneten Prozess, ermöglichen die Kommunikation zwischen übergeordnetem und untergeordnetem Prozess oder listen die Verzeichnisse im aktuellen Arbeitsverzeichnis auf (direkt oder über das Erzeugen der ausführbaren Zieldatei).