Der Knoten ist so konzipiert, dass E/A -Operationen effizient behandelt werden. Sie sollten jedoch wissen, dass einige Arten von Programmen für diesen Modus nicht geeignet sind. Wenn Sie beispielsweise einen Knoten verwenden möchten, um eine CPU-intensive Aufgabe zu erledigen, können Sie die Ereignisschleife blockieren und somit die Antwort des Programms reduzieren. Eine Alternative besteht darin, CPU-intensive Aufgaben einem separaten Prozess zuzuweisen und so die Ereignisschleife zu befreien. Mit Node können Sie einen Prozess hervorbringen und diesen neuen Prozess als Kind seines übergeordneten Prozesses verwenden. Im Knoten kann der untergeordnete Prozess in Zwei-Wege mit dem übergeordneten Prozess kommunizieren, und in gewissem Maße kann der übergeordnete Prozess auch den Kinderprozess überwachen und verwalten.
Ein weiterer Fall, in dem Sie einen untergeordneten Prozess verwenden müssen, ist, wenn Sie einfach einen externen Befehl ausführen und den Node den Rückgabewert des Befehls erhalten möchten. Beispielsweise können Sie einen UNIX -Befehl, ein Skript oder andere Befehle ausführen, die nicht direkt im Knoten ausgeführt werden können.
In diesem Kapitel werden Sie angezeigt, wie Sie externe Befehle ausführen, mit Kindern kommunizieren und Kinder beenden. Es geht darum, Ihnen eine Vorstellung davon zu geben, wie Sie eine Reihe von Aufgaben außerhalb des Knotenprozesses erledigen können. Externe Befehle ausführen Wenn Sie einen externen Shell -Befehl oder eine ausführbare Datei ausführen müssen, können Sie das Modul von Child_Process verwenden, um ihn wie folgt zu importieren: Die Codekopie lautet wie folgt: var child_process = require ('child_process') Anschließend können Sie die EXEC -Funktion im Modul verwenden, um externe Befehle auszuführen: Die Codekopie lautet wie folgt: var exec = child_process.exec; Exec (Befehl, Rückruf); Der erste Parameter von Exec ist die Shell -Befehlszeichenfolge, die Sie ausführen, und der zweite Parameter ist eine Rückruffunktion. Diese Rückruffunktion wird aufgerufen, wenn Exec fertiggestellt wurde, um externe Befehle auszuführen oder ein Fehler auftritt. Die Rückruffunktion enthält drei Parameter: Fehler, stDout, stderr, siehe das folgende Beispiel: Die Codekopie lautet wie folgt: exec ('ls', function (err, stdout, stderr) { // Anmerkung des Übersetzers: Wenn Sie Windows verwenden, können Sie ihn in Windows -Befehl ändern, z. B. DIR, und ich werde es später nicht wiederholen. }); Wenn ein Fehler auftritt, ist der erste Parameter eine Instanz der Fehlerklasse. Wenn der erste Parameter keinen Fehler enthält, enthält der zweite Parameter -STDOut die Standardausgabe des Befehls. Der letzte Parameter enthält den Befehlsfehlerausgang. Das Listing 8-1 zeigt ein komplexeres Beispiel für die Ausführung externer Befehle Listing 8-1: Externe Befehle ausführen (Quellcode: Kapitel8/01_external_Command.js) Die Codekopie lautet wie folgt: // Importieren Sie die Exec -Funktion des Moduls Child_process var exec = required ('child_process'). exec; // den Befehl "cat *.js | wc -l" aufrufen exec ('cat *.js | wc l', function (err, stdout, stderr) {// Zeile 4 // Der Befehl beendet oder der Anruf fällt fehl if (err) { // keinen externen Prozess starten console.log ('child_process exit, der Fehlercode lautet:', err.code); zurückkehren; } } In der vierten Zeile passieren wir "Cat *.js | wc -l" als erster Parameter für Exec. Sie können auch jeden anderen Befehl ausprobieren, solange der Befehl, den Sie in der Shell verwendet haben, in Ordnung ist. Nehmen Sie dann eine Rückruffunktion als zweiter Parameter, der aufgerufen wird, wenn ein Fehler auftritt oder der untergeordnete Prozess endet. Sie können vor der Rückruffunktion auch einen dritten optionalen Parameter übergeben, der einige Konfigurationsoptionen enthält, z. B.: Die Codekopie lautet wie folgt: var exec = required ('child_process'). exec; var options = { Zeitüberschreitung: 1000, KillSignal: 'Sigkill' ' }; exec ('cat *.js | wc l', Optionen, Funktion (Err, stdout, stderr) { //… }); Die Parameter, die verwendet werden können, sind: 1.CWD - Im aktuellen Verzeichnis können Sie das aktuelle Arbeitsverzeichnis angeben. 2. Codierung-Das Codierungsformat des Inhalts des untergeordneten Prozessausgangs ist der Standardwert "UTF8", dh UTF-8-Codierung. Wenn die Ausgabe des untergeordneten Prozesses nicht UTF8 ist, können Sie diesen Parameter verwenden, um ihn festzulegen. Die unterstützten Codierungsformate sind: Die Codekopie lautet wie folgt: ASCII UTF8 UCS2 Basis64 Wenn Sie mehr über diese vom Knoten unterstützten Codierungsformate erfahren möchten, lesen Sie bitte Kapitel 4 "Verwenden von Puffer, um Binärdaten zu verarbeiten, zu codieren und zu dekodieren". 1.Timeout - Die Ausführungsausführung in Millisekunden, die Standardeinstellung ist 0, dh es gibt keine Begrenzung, und warten Sie, bis der Kinderprozess endet. 2.MaxBuffer - Gibt die maximale Anzahl von Bytes an, die vom STDOut -Stream und des Stderr -Streams zulässig sind. Wenn der Höchstwert erreicht ist, wird der Kinderprozess getötet. Der Standardwert beträgt 200*1024. 3.. Der Standardwert ist "sigterm", der ein Kündigungssignal an den untergeordneten Prozess sendet. Dies wird normalerweise verwendet, um den Prozess ordentlich zu beenden. Bei Verwendung von Sigterm -Signalen kann der Prozess nach Empfang auch das Standardverhalten des Signalprozessors verarbeiten oder neu schreiben. Wenn der Zielprozess dies benötigt, können Sie gleichzeitig andere Signale an ihn weitergeben (z. B. Sigusr1). Sie können auch ein Sigkill -Signal senden, das vom Betriebssystem verarbeitet wird und das Kinderprozess sofort beendet wird, sodass jeder Reinigungsbetrieb des untergeordneten Prozesss nicht durchgeführt wird. Wenn Sie das Ende des Prozesses weiter steuern möchten, können Sie den Befehl Child_process.spawn verwenden, der später eingeführt wird. 1.evn - Gibt die Umgebungsvariable an, die an den Kinderprozess übergeben wurde. Der Standard ist null, was bedeutet, dass der untergeordnete Prozess die Umgebungsvariablen aller übergeordneten Prozesse erben, bevor er erstellt wird. Hinweis: Mit der Option KillSignal können Sie Signale an den Zielvorgang als Zeichenfolge senden. Im Knoten existiert das Signal als Zeichenfolge. Hier finden Sie eine Liste von UNIX -Signalen und entsprechenden Standardvorgängen: Möglicherweise möchten Sie für den Kinderprozess eine Reihe erweiterbarer Umgebungsvariablen für Eltern bereitstellen. Wenn Sie das Objekt des Prozesses.EnV direkt ändern, ändern Sie die Umgebungsvariablen aller Module im Knotenprozess, was zu viel Ärger verursacht. Die Alternative besteht darin, ein neues Objekt zu erstellen und alle Parameter im Prozess zu kopieren.EnV siehe Beispiel 8-2: Listing 8-2: Verwenden Sie parameterisierte Umgebungsvariablen, um Befehle auszuführen (Quellcode: Kapitel8/02_Env_vars_augment.js) Die Codekopie lautet wie folgt: var env = process.env, Varname, envCopy = {}, exec = fordert ('child_process'). exec; // Copy Process.env in EnvCopy kopieren für (Vaname in ev) { EnvCopy [varname] = env [varname]; } // Stellen Sie einige benutzerdefinierte Variablen fest envCopy ['benutzerdefinierter env var1'] = 'ein Wert'; envCopy ['benutzerdefinierter env var2'] = 'ein anderer Wert'; // Befehle mit Process.env und benutzerdefinierten Variablen ausführen exec ('ls la', {env: envCopy}, function (err, stdout, stderr) { if (err) {throw ers; } console.log ('stdout:', stdout); console.log ('stderr:', stderr); } Im obigen Beispiel wird eine EnvCopy -Variable erstellt, um Umgebungsvariablen zu sparen. Es kopiert zuerst die Umgebungsvariablen des Knotenprozesses vom Prozess. Denken Sie daran, dass Umgebungsvariablen zwischen den Prozessen über das Betriebssystem übergeben werden und alle Arten von Umgebungsvariablenwerten als Zeichenfolgen zum Kinderprozess gelangen. Wenn der übergeordnete Prozess beispielsweise die Nummer 123 als Umgebungsvariable nimmt, erhält der untergeordnete Prozess "123" als Zeichenfolge. Im folgenden Beispiel werden im selben Verzeichnis zwei Knotenskripte erstellt: Parent.js und Child.js. Das erste Skript ruft den zweiten an. Erstellen wir diese beiden Dateien: Auflistung 8-3: Übergeordnete Prozesssätze Umgebungsvariablen (Kapitel8/03_Environment_Number_Parent.js) Die Codekopie lautet wie folgt: var exec = required ('child_process'). exec; exec ('node child.js', {env: {number: 123}}, function (err, stdout, stderr) { if (err) {throw ers; } console.log ('stdout:/n', stdout); console.log ('stderr:/n', stderr); }); Speichern Sie diesen Code in Parent.js. Das Folgende ist der Quellcode des Kinderprozesses und speichern Sie sie bei Child.js (siehe Beispiel 8-4) Beispiel 8-4: Umgebungsvariablen der Subprozess-Parse (Kapitel 8/04_Numirmment_Number_Child.js) Die Codekopie lautet wie folgt: var number = process.env.number; console.log (typeof (number)); // → "String" Nummer = ParseInt (Nummer, 10); console.log (typeof (number)); // → "Nummer" Nachdem Sie diese Datei als child.js gespeichert haben, können Sie den folgenden Befehl in diesem Verzeichnis ausführen: Die Codekopie lautet wie folgt: $ node parent.js Sie sehen die folgende Ausgabe: Die Codekopie lautet wie folgt: sdtou: Saite Nummer Stderr: Wie Sie sehen können, erhält der untergeordnete Prozess, obwohl der übergeordnete Prozess eine numerische Umgebungsvariable übergeht, als Zeichenfolge (siehe zweite Ausgabezeile) und in der dritten Zeile die Zeichenfolge in eine Zahl analysieren. Kinderprozess erzeugen Wie Sie sehen können, können Sie die Funktion von Child_process.exec () verwenden, um einen externen Prozess zu starten und Ihre Rückruffunktion am Ende des Prozesses aufzurufen. Dies ist sehr einfach zu bedienen, aber es gibt einige Nachteile: 1. Exec () kann nicht nur die Befehlszeilenparameter und Umgebungsvariablen verwenden, sondern auch nicht mit untergeordneten Prozessen kommunizieren. 2. Die Ausgabe des untergeordneten Prozesss wird zwischengespeichert, sodass Sie es nicht streamen können, es kann aus dem Speicher ausgehen Glücklicherweise ermöglicht das Child_process -Modul von Node die feinere Granularität, die Start-, Stopp- und andere konventionelle Operationen von Kinderprozessen zu steuern. Sie können einen neuen Kinderprozess in der Anwendung starten. Der Knoten bietet einen wechselseitigen Kommunikationskanal, mit dem Eltern- und Kinderprozesse Stringdaten voneinander senden und empfangen können. Der übergeordnete Prozess kann auch einige Verwaltungsoperationen für den Kinderprozess haben, Signale an den Kinderprozess senden und den Kinderprozess mit gewaltsamer Schließung schließen. Erstellen Sie einen Kinderprozess Sie können die Funktion von Child_process.spawn verwenden, um einen neuen Kinderprozess zu erstellen, siehe Beispiel 8-5: Beispiel 8-5: Kinderprozess erzeugen. (Kapitel8/05_Spawning_Child.js) Die Codekopie lautet wie folgt: // Importieren Sie die Spawn -Funktion des Child_process -Moduls var spawn = required ('child_process'). Spawn; // Kinderprozesse generieren, die zum Ausführen des Befehls "Tail -f /var/log/system.log" verwendet werden var child = spawn ('tail', ['-f', '/var/log/system.log']); Der obige Code generiert einen untergeordneten Prozess, mit dem Tail-Befehle ausgeführt und "-F" und "/bar/log/system.log" als Parameter verwendet wird. Der Befehl Tail überwacht die Datei /var/log/System.og (falls vorhanden) und dann alle angehängten neuen Daten an den STDOut -Standardausgabestream ausgeben. Die Spawn -Funktion gibt ein untergeordnetes Objekt zurück, das ein Zeigerobjekt ist und die Zugriffsoberfläche des realen Prozesses verkörpert. In diesem Beispiel weisen wir diesen neuen Deskriptor einer Variablen namens Child zu. Hören Sie sich Daten aus untergeordneten Prozessen an Jedes Kinderprozessgriff, das das STDOut -Attribut enthält, nimmt die Standardausgabe des untergeordneten Prozesss als Stream -Objekt an. Sie können das Datenereignis an diesem Stream -Objekt binden, so dass die entsprechende Rückruffunktion aufgerufen wird, wenn ein Datenblock verfügbar ist, siehe das folgende Beispiel: Die Codekopie lautet wie folgt: // Drucken Sie die Ausgabe des untergeordneten Verfahrens in die Konsole aus chinesische.stdout.on ('Daten', Funktion (Daten) { Console.log ('Tail Output:' + Data); }); Immer wenn der untergeordnete Prozess Daten an den Standardausgangs -STDOut ausgibt, wird der übergeordnete Prozess benachrichtigt und druckt die Daten in die Konsole. Zusätzlich zur Standardausgabe hat der Prozess einen weiteren Standardausgangsstrom: den Standardfehlerstrom, der normalerweise zur Ausgabe von Fehlerinformationen verwendet wird. Wenn in diesem Beispiel die Datei /var/log/system.log nicht vorhanden ist, gibt der Schwanzprozess eine Meldung aus, die wie folgt ähnelt: "/var/log/system.log: Keine solche Datei oder Verzeichnis". Durch das Anhören des Stderr -Streams wird der übergeordnete Prozess bei diesem Fehler benachrichtigt. Der übergeordnete Prozess kann Standardfehlerströme wie folgt anhören: Die Codekopie lautet wie folgt: Child.stderr.on ('Data', Funktion (Daten) { console.log ('Heckfehlerausgabe:', Daten); }); Die Stderr-Eigenschaft ist wie Stdout auch ein schreibgeschützter Stream. Immer wenn ein untergeordneter Prozess Daten in den Standardfehlerstrom ausgibt, wird der übergeordnete Prozess benachrichtigt und Datenausgabe. Senden Sie Daten an untergeordneten Prozess Zusätzlich zum Empfang von Daten aus dem Ausgabestrom des untergeordneten Prozesss kann der übergeordnete Prozess auch Daten in die Standardeingabe des untergeordneten Prozesses über die Kinderbilde schreiben. Der untergeordnete Prozess kann die Standardeingangsdaten über den Prozess anhören. Beispiel 8-6 erstellt ein Programm mit den folgenden Funktionen: 1.+1 Anwendung: Eine einfache Anwendung, die Ganzzahlen von der Standardeingabe empfangen, dann hinzufügen und dann das Ergebnis nach Zugabe zum Standardausgangsstrom ausgeben kann. Als einfacher Computerdienst simuliert diese Anwendung den Knotenprozess als externer Dienst, der bestimmte Aufgaben ausführen kann. 2. Testen Sie den Client von +1 Anwendung, senden Sie eine zufällige Ganzzahl und geben Sie dann das Ergebnis aus. Wird verwendet, um zu demonstrieren, wie der Knotenprozess einen untergeordneten Prozess erzeugt, und ermöglicht es dann bestimmte Aufgaben. Verwenden Sie den folgenden Code in Beispiel 8-6, um eine Datei mit dem Namen plus_one.js zu erstellen: Beispiel 8-6: +1 Anwendung (Kapitel8/06_plus_one.js) Die Codekopie lautet wie folgt: // standardmäßig den Standardeingangsstrom wiederherstellen process.stdin.resume (); process.stdin.on ('data', function (data) { var number; versuchen { // analysieren Sie die Eingabedaten in eine Ganzzahl number = parseInt (data.toString (), 10); // +1 Zahl += 1; // Ausgabeergebnis process.stdout.write (number + "/n"); } catch (err) { process.stderr.write (err.message + "/n"); } }); Im obigen Code warten wir auf Daten aus dem STDIN -Standardeingangsstrom. Wenn Daten verfügbar sind, gehen wir davon aus, dass es sich um eine Ganzzahl handelt, und analysiert sie in eine Ganzzahlvariable, fügen Sie dann 1 hinzu und geben das Ergebnis in den Standardausgabestream aus. Sie können dieses Programm über den folgenden Befehl ausführen: Die Codekopie lautet wie folgt: $ node plus_one.js Nach dem Laufen wartet das Programm auf die Eingabe. Wenn Sie eine Ganzzahl eingeben und die Eingabetaste drücken, sehen Sie eine Nummer, nachdem Sie 1 hinzugefügt wurden, die auf dem Bildschirm angezeigt werden. Sie können das Programm beenden, indem Sie Strg-C drücken. Ein Testkunde Jetzt möchten Sie einen Knotenprozess erstellen, um die von der vorherigen "+1 -Anwendung" bereitgestellten Computerdienste zu verwenden. Erstellen Sie zunächst eine Datei namens plus_one_test.js, siehe Beispiel 8-7: Beispiel 8-7: Test +1 Anwendung (Kapitel8/07_PLUS_one_test.js) Die Codekopie lautet wie folgt: var spawn = required ('child_process'). Spawn; // generieren Sie einen untergeordneten Prozess, um +1 Anwendung auszuführen var child = spawn ('node', ['plus_one.js']); // Ruf die Funktion jede Sekunde auf setInterval (function () { // Erstellen Sie eine Zufallszahl kleiner als 10.000 var number = math.floor (math.random () * 10000); // Sende diese Nummer an den Kinderprozess: child.stdin.write (number + "/n"); // Erhalten Sie die Antwort aus dem untergeordneten Prozess und drucken Sie sie aus: child.stdout.once ('data', function (data) { console.log ('Kind antwortete auf' + number + 'mit:' + data); }); }, 1000); Child.stderr.on ('Data', Funktion (Daten) { process.stdout.write (Daten); }); Von der ersten Zeile bis zur vierten Zeile wird ein untergeordneter Prozess mit der Ausführung der "+1 -Anwendung" begonnen, und dann werden die folgenden Vorgänge in jeder Sekunde unter Verwendung der SetInterval -Funktion ausgeführt: 1. Erstellen Sie eine neue Zufallszahl von weniger als 10000 2. Übergeben Sie diese Nummer als Zeichenfolge an den Kinderprozess 3. Warten Sie, bis der Kinderprozess auf eine Zeichenfolge antwortet 4. Da Sie jeweils nur 1 Nummer erhalten möchten, müssen Sie Child.stdout.once anstelle von Child.stdout.on verwenden. Wenn der letztere verwendet wird, wird eine Rückruffunktion eines Datenereignisses alle 1 Sekunde registriert. Jede registrierte Rückruffunktion wird ausgeführt, wenn der STDOut des untergeordneten Prozesss Daten erhält. Auf diese Weise werden Sie feststellen, dass das gleiche Berechnungsergebnis mehrmals ausgegeben wird. Dieses Verhalten ist offensichtlich falsch. Benachrichtigungen erhalten, wenn ein Kinderprozess ausgeht Wenn der Kinderprozess ausgeht, wird das Exit -Ereignis abgefeuert. Beispiel 8-8 zeigt, wie man es anhört: Beispiel 8-8: Hören Sie sich das Exit-Ereignis des untergeordneten Prozesss an (Kapitel 8/09_Listen_Child_exit.js) Die Codekopie lautet wie folgt: var spawn = required ('child_process'). Spawn; // Kinderprozess erstellen, um den Befehl "ls -la" auszuführen var child = spawn ('ls', ['-la']); chinesische.stdout.on ('Daten', Funktion (Daten) { console.log ('Daten von Child:' + Data); }); // Wenn der Kinderprozess ausgeht: <strong> child.on ('exit', function (code) { console.log ('untergeordneter Prozess mit Code ’ + Code); }); </strong> In den letzten Zeilen von Black Code verwendet der übergeordnete Prozess das Exit -Event des untergeordneten Prozesses, um für sein Exit -Ereignis zu hören. Wenn das Ereignis auftritt, zeigt die Konsole die entsprechende Ausgabe an. Der Ausgangscode des untergeordneten Prozesses wird als erster Parameter an die Rückruffunktion übergeben. Einige Programme verwenden einen Nicht-0-Exit-Code, um einen bestimmten Fehlerzustand darzustellen. Wenn Sie beispielsweise versuchen, den Befehl "ls al klicken Sie auf Dateiname.txt" auszuführen, aber das aktuelle Verzeichnis hat diese Datei nicht, erhalten Sie einen Bezugscode mit einem Wert von 1, siehe Beispiel 8-9: Beispiel 8-9: Erhalten Sie den Beenden-Code des untergeordneten Prozesss (Kapitel 8/10_Child_exit_code.js) Die Codekopie lautet wie folgt: var spawn = required ('child_process'). Spawn; // Kinderprozess erstellen und den Befehl "ls do_not_exist.txt" ausführen var child = spawn ('ls', ['dat_not_exist.txt']); // Wenn der Kinderprozess ausgeht child.on ('exit', function (code) { console.log ('untergeordneter Prozess mit Code ’ + Code); }); In diesem Beispiel löst das Exit -Ereignis die Rückruffunktion aus und übergibt den Exit -Code des untergeordneten Prozesses als erster Parameter. Wenn der Kinderprozess abnormal ausgeht, weil durch ein Signal getötet wurde, wird der entsprechende Signalcode wie in Beispiel 8-10 an die Rückruffunktion als zweiter Parameter übergeben: Listing 8-10: Erhalten Sie das Ausgangssignal des untergeordneten Prozesss (Kapitel 8/11_Child_exit_signal.js) Die Codekopie lautet wie folgt: var spawn = required ('child_process'). Spawn; // Kinderprozess erstellen und den Befehl "Sleep 10" ausführen var Child = Spawn ('Schlaf', ['10']); setTimeout (function () { Child.Kill (); }, 1000); child.on ('exit', Funktion (Code, Signal) { if (Code) { console.log ('untergeordneter Prozess mit Code ’ + Code); } else if (signal) { console.log ('Kinderprozess wegen Signal' + Signal); } }); In diesem Beispiel wird ein Kinderprozess 10 Sekunden lang Schlaf ausführen, ein Sigkill -Signal wird jedoch vor 10 Sekunden an den Kinderprozess gesendet, was zu der folgenden Ausgabe führt: Die Codekopie lautet wie folgt: Kinderprozess wegen Signal Sigmterm beendet Senden Sie ein Signal und töten Sie den Prozess ab In diesem Abschnitt lernen Sie, wie Sie Signale verwenden, um Subprozesse zu verwalten. Signale sind eine einfache Möglichkeit für einen Elternprozess, mit Kindern zu kommunizieren und sogar Kinder zu töten. Unterschiedliche Signalcodes repräsentieren unterschiedliche Bedeutungen, und es gibt viele Signale, von denen einige die häufigsten zum Abtöten von Prozessen verwendet werden. Wenn ein Prozess ein Signal erhält, dass er nicht weiß, wie er umgehen soll, wird das Programm durch Ausnahme unterbrochen. Einige Signale werden von Unterprozessen verarbeitet, während andere nur vom Betriebssystem verarbeitet werden können. Im Allgemeinen können Sie die Methode Child.Kill verwenden, um ein Signal an den untergeordneten Prozess zu senden und standardmäßig ein Sigterm -Signal zu senden: Die Codekopie lautet wie folgt: var spawn = required ('child_process'). Spawn; var Child = Spawn ('Schlaf', ['10']); setTimeout (function () { Child.Kill (); }, 1000); Sie können auch ein bestimmtes Signal senden, indem Sie in einem Zeichenfolge das Signal als einziger Parameter der Kill -Methode identifizieren: Die Codekopie lautet wie folgt: Child.Kill ('sigusr2'); Es ist zu beachten, dass der Name dieser Methode zwar getötet ist, das gesendete Signal den Kinderprozess nicht unbedingt abtötet. Wenn das Kind das Signal verarbeitet hat, wurde das Standardsignalverhalten überschrieben. Im Knoten geschriebene Unterprozesse können die Definition des Signalprozessors wie folgt umschreiben: Die Codekopie lautet wie folgt: process.on ('sigusr2', function () { console.log ('habe ein Sigusr2 -Signal'); }); Jetzt haben Sie den Sigusr2 -Signalprozessor definiert. Wenn Ihr Prozess das Sigusr2 -Signal erneut empfängt, wird es nicht getötet, sondern gibt den Satz "ein Sigusr2 -Signal" aus. Mit diesem Mechanismus können Sie eine einfache Möglichkeit entwerfen, mit dem Kinderprozess zu kommunizieren oder sogar zu befehlen. Obwohl es nicht so reich ist wie die Verwendung von Standardeingaben, ist diese Methode viel einfacher. Zusammenfassung In diesem Kapitel haben wir gelernt, die Methode von Child_process.exec zu verwenden, um externe Befehle auszuführen. Auf diese Weise können wir Parameter an den untergeordneten Prozess übergeben, anstatt Befehlszeilenparameter zu verwenden, sondern um Umgebungsvariablen zu definieren. Ich habe auch gelernt, wie man Kinderprozesse generiert, indem ich die Methode von Child_Process.spawn aufruft, um externe Befehle aufzurufen. Auf diese Weise können Sie Eingabestreams und Ausgabeströme verwenden, um mit untergeordneten Prozessen zu kommunizieren oder Signale zu verwenden, um mit Kindernprozessen zu kommunizieren und Prozesse zu töten.