2017-07-21 14 views
1

Je travaille sur une application où un processus nodal central lance divers processus fils-nœuds. J'ai des problèmes avec le processus enfant qui sort après beaucoup de sortie console (peu importe si elle est redirigée vers le processus parent ou non).Le processus fils Node.js se bloque après beaucoup de console.log

je pouvais réduire le problème à une simple configuration de deux fichiers:

  • Si je lance « nœud child.js » il fonctionne sans aucun problème.
  • Si j'exécute "node server.js", ce processus démarre également child.js, mais il renvoie le code "null" après 16615 "console.log" -outputs.
    Le fichier node.exe fonctionne encore pendant un certain temps et consomme jusqu'à 1500 Mo de RAM. (Running "nœud child.js" prend un maximum de 650 Mo.)

code: https://gist.github.com/anonymous/e7797d277770eeb1d1db20a0363c9d0a

Quelqu'un peut-il me dire ce que je fais mal?


Node Versions: 6.11.1 et 8.2.1 sous Windows 10 x64.

parent.js

var child = require('child_process'); 

console.log('parent (PID ' + process.pid + ': starting child'); 
var proc = child.exec('node child.js'); 
console.log('parent: stated child'); 
proc.stdout.pipe(process.stdout); 
proc.stderr.pipe(process.stderr); 
proc.on('close', (code) => { 
    console.log('parent: child process exited with code ' + code); 
}); 

child.js

console.log('child: i have been started - PID ' + process.pid); 
for (var i = 1; i < 3000000; i++){ 
    console.log('child: ' + i); 
} 
console.log('child: i have finished'); 
+5

['exec' tamponne toutes les sorties du processus fils] (https://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback); vous voulez probablement "spawn". Aussi, veuillez modifier votre question pour inclure le code directement plutôt que de lier un Gist. – Ryan

+0

Veuillez fournir Node.js Version + OS. –

+0

Le remplacement de 'exec' par' spawn' a résolu le problème. Merci! – cpyc2016

Répondre

0

Vous probablement dépassé la limite par défaut de maxBuffer. En tant que second paramètre à votre processus enfant, ajoutez { maxBuffer: 10 * 1024 * 1024 * 1024} pour augmenter la maxBuffer:

child.exec ('nœud child.js', {maxBuffer: 10 * 1024 * 1024 * 1024})