Come forgiare un processo di un altro modulo

TL; DR: Come si fa a forgiare un processo che si trova al di fuori del processo corrente in esecuzione?

Sto cercando di utilizzare child_process di Nodejs per avviare un altro processo nodejs sull’uscita del processo del genitore.

Ho eseguito con successo il processo con exec ma ho bisogno che il processo figlio sia indipendente dal genitore, quindi il genitore può uscire senza aspettare il bambino, quindi ho provato ad usare spawn con l’opzione detached: true, stdio: 'ignore' e unref() il processo:

impostando options.detached su true, è ansible che il processo figlio continui a essere eseguito dopo la chiusura del genitore.

spawn('node MY_PATH', [], {detached: true, stdio: 'ignore'}).unref();

Questo produce:

node MY_PATH ENOENT errore node MY_PATH ENOENT . che sfortunatamente non ho risolto.

Dopo aver avuto problemi a ottenere questo risultato con spawn e aver letto di nuovo la documentazione ho pensato che avrei dovuto usare la fork :

Il metodo child_process.fork () è un caso speciale di child_process.spawn () utilizzato specificamente per generare nuovi processi Node.js.

fork() accetta un comando come il suo ‘primo argomento, ma un modulePath che non riesco a soddisfare perché lo script che sto cercando di eseguire come processo figlio non si trova nella directory del processo in esecuzione corrente, ma in un dipendenza del suo.

Torna all’inizio TL; DR – come si fa a forgiare un processo che si trova al di fuori del processo in corso?

Qualsiasi aiuto sarebbe molto apprezzato!

MODIFICARE:

Fornire una soluzione all’errore di spawn ENOENT potrebbe essere anche molto utile!

Il seguente codice dovrebbe consentire di fare ciò di cui hai bisogno.

 var Path = require('path'); var Spawn = require('child_process').spawn; var relative_filename = '../../node_modules/bla/bla/bla.js'; Spawn('node', [Path.resolve(__dirname, relative_filename)], {detached: true, stdio: 'ignore'}).unref(); process.exit(0);