2016-03-03 43 views
8

Secondo the docs per child_process.spawn mi aspetterei di essere in grado di eseguire un processo figlio in primo piano e consentire il processo nodo stesso per uscire in questo modo:node.js: Come per deporre le uova bambino distaccata in primo piano e l'uscita

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(); 

Invece di vedere l'output del comando ping, esce semplicemente senza alcun messaggio o di errore.

node handoff-exec.js 
hello 
echo $? 
0 

Quindi ... E 'possibile in node.js (o affatto) per eseguire un bambino in primo piano come le uscite genitore?

UPDATE: Ho scoperto che la rimozione di console.log('hello'); consente al bambino di funzionare, tuttavia, non passa ancora il controllo dello stdin in primo piano al bambino.

+0

Possibile duplicato di [Come ascoltare e generare più processi figlio in nodejs] (http://stackoverflow.com/questions/32358845/how-do-i-listen-and-spawn-multiple-child-process- in-nodejs) –

+0

No. Si trattava di utilizzare una chiusura in JavaScript per acquisire i riferimenti JS a più processi figlio. Si tratta di riferimenti al processo e consente al bambino di assumere il controllo dell'input standard. – CoolAJ86

+0

Per quello che vale, ho provato a eseguire il codice e ha funzionato come previsto per me: il processo del nodo è terminato e l'output del comando ping è stato stampato su stdout. Questo è su Mac OS e node.js v5.4.1. Non funziona se annullo il console.log - che trovo molto strano. –

risposta

-1

Ti manca

// 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()); 
}); 

e non è necessario il child.unref();

+1

Ciò comporterebbe l'esecuzione del processo principale. – CoolAJ86