8

Nach the docs für child_process.spawn würde ich erwarten zu können, einen Kind-Prozess im Vordergrund und erlauben dem Knoten Prozess selbst zu verlassen, wie so läuft:node.js: Wie frei stehendes Kind im Vordergrund, um laichen und Ausfahrt

handoff-exec.js:

'use strict'; 

var spawn = require('child_process').spawn; 

// this console.log before the spawn seems to cause 
// the child to exit immediately, but putting it 
// afterwards seems to not affect it. 
//console.log('hello'); 

var child = spawn(
    'ping' 
, [ '-c', '3', 'google.com' ] 
, { detached: true, stdio: 'inherit' } 
); 

child.unref(); 

Statt den Ausgang des ping Befehl zu sehen, verlässt er einfach ohne jede Nachricht oder Fehler.

node handoff-exec.js 
hello 
echo $? 
0 

So ... ist es möglich, in node.js (oder überhaupt) ein Kind im Vordergrund wie die Eltern Ausfahrten zu laufen?

AKTUALISIEREN: Ich habe festgestellt, dass das Entfernen von console.log('hello'); ermöglicht, dass das Kind ausgeführt wird, es gibt jedoch weiterhin Vordergrund-Std-Steuerelement an das Kind nicht weiter.

+0

Mögliche Duplikate von [Wie höre und spawn mehrere Kindprozess in nodejs] (http://stackoverflow.com/questions/32358845/how-do-listen-and-spawn-multiple-child-process- in-nodejs) –

+0

Nein. Es ging darum, in JavaScript eine Closure zu verwenden, um die JS-Verweise auf mehrere untergeordnete Prozesse zu erfassen. Hier geht es um Prozessreferenzen und die Kontrolle über die Standardeingabe durch das Kind. – CoolAJ86

+0

Für was es wert ist, habe ich versucht, Ihren Code auszuführen und es funktionierte wie erwartet für mich - der Knoten-Prozess beendet, und die Ping-Befehl-Ausgabe wurde auf Standard gedruckt. Dies ist unter Mac OS und node.js v5.4.1. Es funktioniert nicht, wenn ich das console.log auskommentiere - was ich sehr seltsam finde. –

Antwort

-1

Sie vermissen

// Listen for any response: 
child.stdout.on('data', function (data) { 
    console.log(data.toString()); 
}); 

// Listen for any errors: 
child.stderr.on('data', function (data) { 
    console.log(data.toString()); 
}); 

und Sie brauchen nicht die child.unref();

+1

Das würde dazu führen, dass der Elternprozess weiterhin ausgeführt wird. – CoolAJ86

Verwandte Themen