2017-04-13 3 views
2

Ich spawne einen untergeordneten Prozess mit Knoten 6.9.Node.js untergeordneter Prozess wird mit SIGTERM beendet

const child = require('child_process').execFile('command', args); 
child.stdout.on('data', (data) => { 
    console.log('child:', data); 
}); 
child.stderr.on('data', (data) => { 
    console.log('child:', data); 
}); 
child.on('close', (code, signal) => { 
    console.log(`ERROR: child terminated. Exit code: ${code}, signal: ${signal}`); 
}); 

Mein Kind Prozess läuft für ~ 1 m 30 s, aber dann bekomme ich diese Ausgabe von meinem Node.js Programm:

ERROR: child terminated. Exit code: null, signal: SIGTERM 

Was Prozess meines Kindes beendet und warum?

Bearbeiten: Ich habe killSignal hinzugefügt: 'SIGILL' als eine Option.

var child = require('child_process').execFile('geth', args, { killSignal: 'SIGILL'}); 

Jetzt bekomme ich diese:

ERROR: go-ethereum terminated. Exit code: 2, signal: null 
+0

Bedeutet "standalone" innerhalb des Containers, aber nicht von Node oder außerhalb des Containers, aber von Node erzeugt? – Ryan

+0

Hallo Ryan, Entschuldigung, ich habe es deutlicher gemacht. Innerhalb des Containers, aber nicht durch den Knoten – mitchkman

+1

erzeugt Ich nehme nicht an, dass 'args' eine 'timeout'-Eigenschaft hat? Wenn Sie 'Object.assign ({}, args, {killSignal: 'SIGILL'})' übergeben, ändert sich das Signal? – Ryan

Antwort

3

ich das Problem und eine Lösung gefunden.

Von https://nodejs.org/dist/latest-v6.x/docs/api/child_process.html#child_process_child_process_execfile_file_args_options_callback

maxBuffer largest amount of data (in bytes) allowed on stdout or stderr - if exceeded child process is killed (Default: 200*1024)

kann ich die maxBuffer Option höher eingestellt.

childProcess.execFile('geth', args, { maxBuffer: 400 * 1024}); 

Es scheint, dass Sie nicht die maxBuffer Option deaktivieren können, auch nicht durch sie auf 0. Aber es scheint, absichtlich zu sein.

+0

Ich denke, das gleiche ist mir passiert, als ich ein Programm mit "Fortschrittsmeldungen" als Subprozess ausgeführt habe. Nach einiger Zeit lief Node ab. Es erscheint schwierig, abzuschätzen, wie groß die Puffergröße sein sollte. Es scheint mir, dass es eine gute allgemeine Lösung ist, Programme zu vermeiden, die zu viele Informationen protokollieren. – Jackson

Verwandte Themen