English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Wir alle wissen, dass Node.js im Ein-Threading-Modus läuft, aber er verwendet Ereignissteuerung, um Konflikte zu behandeln, was uns hilft, mehrere Unterprozesse auf Multicore-CPU-Systemen zu erstellen, um die Leistung zu verbessern.
Jeder Unterprozess verfügt immer über drei Stream-Objekte: child.stdin, child.stdout und child.stderr. Diese können die stdio-Ströme des Elternprozesses teilen oder auch als unabhängige, geleitete Stream-Objekte sein.
Node bietet den child_process-Modul an, um Unterprozesse zu erstellen, wobei die Methoden sind:
exec - child_process.exec führt Befehle mit Unterprozessen aus, puffert die Ausgabe des Unterprozesses und gibt die Ausgabe des Unterprozesses als Parameter der Rückruffunktion zurück.
spawn - child_process.spawn erstellt einen neuen Prozess mit angegebenen Kommandozeilenargumenten.
fork}} - child_process.fork ist eine spezielle Form von spawn(), die für in Unterprozessen ausgeführte Module verwendet wird, wie fork('.',/son.js')) entspricht spawn('node', ['.',/son.js')). Im Gegensatz zur spawn()-Methode erstellt fork zwischen dem Elternprozess und dem Unterprozess eine Kommunikationsleitung, die für die Kommunikation zwischen den Prozessen verwendet wird.
child_process.exec führt Befehle mit Unterprozessen aus, puffert die Ausgabe des Unterprozesses und gibt die Ausgabe des Unterprozesses als Parameter der Rückruffunktion zurück.
Die Syntax ist wie folgt gezeigt:
child_process.exec(command[, options], callback)
参数说明如下:
command: Zeichenkette, der auszuführende Befehl, Parameter werden durch Leerzeichen getrennt
options : Objekt, kann sein:
cwd, Zeichenkette, das aktuelle Arbeitsverzeichnis des Unterprozesses
env, Objekt, Schlüssel-Wert-Paare von Umgebungsvariablen
encoding, Zeichenkette, Zeichencodierung (Standard: 'utf8'])
shell, Zeichenkette, der Shell, der zum Ausführen des Befehls verwendet wird (Standard: im UNIX)/bin/sh, in Windows cmd.exe, der Shell sollte den Shell erkennen -c-Schalter in UNIX oder /s /c in Windows. In Windows sollte die Kommandozeilenauflösung kompatibel mit cmd.exe sein)
timeout, Zahl, Zeitüberschreitung (Standard: 0)
maxBuffer, Zahl, maximaler Puffer (binär) in stdout oder stderr, der erlaubt ist, wenn dieser Wert überschritten wird, wird der Unterprozess beendet (Standard: 200*1024)
killSignal, Zeichenkette, Beendigungssignal (Standard: 'SIGTERM')
uid, Zahl, setzt die ID des Benutzerprozesses
gid, Zahl, setzt die ID der Prozessgruppe
callback :Rückruffunktion, die drei Parameter error, stdout und stderr enthält.
Die exec()-Methode gibt den größten Puffer zurück und wartet auf das Ende des Prozesses, um den Inhalt des Puffers einmalig zurückzugeben.
让我们创建两个 js 文件 support.js 和 master.js。
console.log("进程 " + process.argv[2] + " 执行。" );
const fs = require('fs'); const child_process = require('child_process'); for(var i=0; i<3; i++) { var workerProcess = child_process.exec('node support.js ')+i, Funktion, (Fehler, stdout, stderr) { if (error) {}} console.log(error.stack); console.log('Fehlercode: ')+error.code); console.log('Signal empfangen: ')+error.signal); } console.log('stdout: ') + stdout); console.log('stderr: ') + stderr); }); workerProcess.on('exit', function(code) { console.log('子进程已退出,退出码 '+code); }); }
执行以上代码,输出结果为:
$ node master.js 子进程已退出,退出码 0 stdout: Prozess 1 执行。 stderr: 子进程已退出,退出码 0 stdout: Prozess 0 wird ausgeführt. stderr: 子进程已退出,退出码 0 stdout: Prozess 2 执行。 stderr:
child_process.spawn erstellt einen neuen Prozess mit den angegebenen Befehlszeilenargumenten und hat die folgende Syntax:
child_process.spawn(command[, args][, options])
参数说明如下:
command: Auszuführende Befehl
args: Array Zeichenfolge-Parameterarray
options Object
cwd String 子进程的当前工作目录
env Object 环境变量键值对
stdio Array|String Die stdio-Konfiguration des Unterprozesses
detached Boolean Dieser Unterprozess wird zum Führer der Prozessgruppe
uid Number 设置用户进程的 ID
gid Number 设置进程组的 ID
Die spawn()-Methode gibt Ströme (stdout & stderr) zurück und wird verwendet, wenn der Prozess eine große Menge an Daten zurückgibt. spawn() beginnt mit dem Empfang der Antworten, sobald der Prozess beginnt, ausgeführt zu werden.
让我们创建两个 js 文件 support.js 和 master.js。
console.log("进程 " + process.argv[2] + " 执行。" );
const fs = require('fs');const child_process = require('child_process'); for(var i=0; i<3; i++) { var workerProcess = child_process.spawn('node', ['support.js', i]); workerProcess.stdout.on('data', function(data) { console.log('stdout: ') + data); }); workerProcess.stderr.on('data', function(data) { console.log('stderr: ') + data); }); workerProcess.on('close', function(code) { console.log('子进程已退出,退出码 '+code); });}
执行以上代码,输出结果为:
$ node master.js stdout: Prozess 0 wird ausgeführt. 子进程已退出,退出码 0 stdout: Prozess 1 执行。 子进程已退出,退出码 0 stdout: Prozess 2 执行。 子进程已退出,退出码 0
child_process.fork ist eine spezielle Form der spawn()-Methode, um Prozesse zu erstellen und hat die folgende Syntax:
child_process.fork(modulePath[, args][, options])
参数说明如下:
modulePath: String,将要在子进程中运行的模块
args: Array 字符串参数数组
options:Object
cwd String 子进程的当前工作目录
env Object 环境变量键值对
execPath String 创建子进程的可执行文件
execArgv Array 子进程的可执行文件的字符串参数数组(默认: process.execArgv)
silent Boolean 如果为true,子进程的stdin,stdout和stderr将会被关联至父进程,否则,它们将会从父进程中继承。(默认为:false)
uid Number 设置用户进程的 ID
gid Number 设置进程组的 ID
返回的对象除了拥有ChildProcess示例的所有方法,还有一个内建的通信信道。
让我们创建两个 js 文件 support.js 和 master.js。
console.log("进程 " + process.argv[2] + " 执行。" );
const fs = require('fs');const child_process = require('child_process'); for(var i=0; i<3; i++) { var worker_process = child_process.fork("support.js", [i]); worker_process.on('close', function (code) { console.log('子进程已退出,退出码 ' + code); });}
执行以上代码,输出结果为:
$ node master.js 进程 0 执行。 子进程已退出,退出码 0 进程 1 执行。 子进程已退出,退出码 0 进程 2 执行。 子进程已退出,退出码 0