English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Nous savons tous que Node.js fonctionne en mode mono-threadé, mais il utilise l'événement pour gérer la concurrence, ce qui nous permet de créer plusieurs processus enfants sur un système CPU multicœur, améliorant ainsi les performances.
Chaque processus enfant est toujours accompagné de trois objets flux : child.stdin, child.stdout et child.stderr. Ils peuvent partager les flux stdio du processus parent ou être des objets flux indépendants et redirigés.
Node fournit le module child_process pour créer des processus enfants, les méthodes incluent :
exec - child_process.exec exécute une commande en utilisant un processus fils, stocke la sortie du processus fils et retourne la sortie du processus fils sous forme de paramètres de fonction de rappel.
spawn - child_process.spawn crée un nouveau processus avec des arguments de ligne de commande spécifiés.
fork - child_process.fork est une forme spéciale de spawn() utilisée pour exécuter des modules dans les processus fils, comme fork('./son.js') est une forme spéciale de spawn() utilisée pour exécuter des modules dans les processus fils, comme fork('./son.js') est équivalent à spawn('node', ['.',
child_process.exec exécute une commande en utilisant un processus fils, stocke la sortie du processus fils et retourne la sortie du processus fils sous forme de paramètres de fonction de rappel.
La syntaxe est indiquée comme suit :
child_process.exec(command[, options], callback)
Paramètres
command : chaîne, commande à exécuter, les paramètres sont séparés par des espaces
options : objet, peut être :
cwd, chaîne, répertoire de travail du processus fils
env, objet, paires de variables d'environnement
encoding, chaîne, codage de caractères (par défaut : 'utf8de ')
shell, chaîne, Shell à exécuter la commande (par défaut : dans UNIX de/bin/sh, dans Windows pour cmd.exe, le Shell doit pouvoir le reconnaître -l'option c dans UNIX, ou /s /c dans Windows. Dans Windows, l'analyse de la ligne de commande doit être compatible avec cmd.exe)
timeout, nombre, temps d'expiration (par défaut : 0)
maxBuffer, nombre, le plus grand tampon autorisé dans stdout ou stderr (binaire), si il dépasse, le processus fils sera tué (par défaut : 200*1024)
killSignal, chaîne, signal de fin (par défaut : 'SIGTERM')
uid, nombre, définit l'ID du processus utilisateur.
gid, nombre, définit l'ID du groupe de processus.
callback :La fonction de rappel, contient trois paramètres error, stdout et stderr.
La méthode exec() retourne le plus grand tampon, attend la fin du processus et retourne le contenu du tampon en une seule fois.
Créons deux fichiers js, support.js et master.js.
console.log("Processus ") + process.argv[2] + " Exécuter. " );
const fs = require('fs'); const child_process = require('child_process'); for(var i=0; i<3; i++) { var processusTravail = child_process.exec('node support.js ')+i, fonction (erreur, stdout, stderr) { if (error) {}} console.log(error.stack); console.log('Code d'erreur : ')+error.code); console.log('Signal reçu : ')+error.signal); } console.log('stdout: ') + stdout); console.log('stderr: ') + stderr); }); workerProcess.on('exit', function(code) { console.log('Le processus fils a quitté, code de sortie ')+code); }); }
Exécuter le code suivant, le résultat de la sortie est :
$ node master.js Le processus fils a quitté, code de sortie 0 stdout: processus 1 Exécuter. stderr: Le processus fils a quitté, code de sortie 0 stdout: processus 0 en exécution. stderr: Le processus fils a quitté, code de sortie 0 stdout: processus 2 Exécuter. stderr:
child_process.spawn crée un nouveau processus avec les arguments de ligne de commande spécifiés, avec la syntaxe suivante :
child_process.spawn(command[, args][, options])
Paramètres
command : commande à exécuter
args : Array tableau de paramètres de chaîne de caractères
options Object
cwd String Dossier de travail du processus fils
env Object Paire de variables d'environnement
stdio Array|String configuration stdio du sous-processus
detached Boolean ce sous-processus deviendra le leader du groupe de processus
uid Number Définir l'ID du processus utilisateur
gid Number Définir l'ID du groupe de processus
support.js fichier code :
Créons deux fichiers js, support.js et master.js.
console.log("Processus ") + process.argv[2] + " Exécuter. " );
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('Le processus fils a quitté, code de sortie ')+code); });}
Exécuter le code suivant, le résultat de la sortie est :
$ node master.js stdout: processus 0 en exécution. Le processus fils a quitté, code de sortie 0 stdout: processus 1 Exécuter. Le processus fils a quitté, code de sortie 0 stdout: processus 2 Exécuter. Le processus fils a quitté, code de sortie 0
child_process.fork est une forme spéciale de spawn(), utilisée pour créer des processus, avec la syntaxe suivante :
child_process.fork(modulePath[, args][, options])
Paramètres
Explication des paramètres :modulePath
: String, module à exécuter dans le processus filsargs
: Array Tableau de paramètres de chaîne:Object
cwd String Dossier de travail du processus fils
env Object Paire de variables d'environnement
execPath String Créer l'exécutable du processus fils
execArgv Array Tableau de paramètres de chaîne de l'exécutable du processus fils (par défaut : process.execArgv)
silent Boolean Si true, stdin, stdout et stderr du processus fils seront liés au processus parent, sinon, ils hériteront du processus parent. (par défaut : false)
uid Number Définir l'ID du processus utilisateur
gid Number Définir l'ID du groupe de processus
L'objet retourné possède non seulement toutes les méthodes de l'exemple ChildProcess, mais aussi un canal de communication intégré.
Créons deux fichiers js, support.js et master.js.
console.log("Processus ") + process.argv[2] + " Exécuter. " );
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('Le processus fils a quitté, code de sortie ') + code); });}
Exécuter le code suivant, le résultat de la sortie est :
$ node master.js Processus 0 exécuter. Le processus fils a quitté, code de sortie 0 Processus 1 Exécuter. Le processus fils a quitté, code de sortie 0 Processus 2 Exécuter. Le processus fils a quitté, code de sortie 0