2013-04-24 2 views
16

Attualmente sto cercando di eseguire diversi passaggi che richiedono di generare i compiti nei processi figli. Per esempio:Eliminazione dei processi generati quando esce grunt

  1. file Guarda
  2. Start up di mio Static Site Generator Anteprima Server

posso usare facilmente a compiti come grunt-concurrent di avere entrambi questi eseguiti simultaneamente. Tuttavia, quando esco da grunt, il processo figlio (in questo caso, il generatore di sito statico che sto utilizzando utilizzando grunt-shell) continua a essere in esecuzione. Mi piacerebbe che queste attività funzionassero contemporaneamente, ma anche che venissero uccise quando esce il grunt.

Pensieri?

risposta

0

c'è qualche ragione per cui non si usa grunt-contrib-connect per avviare un server nella root del progetto?

, se possibile, fare questo invece di utilizzare grugnito-shell, e il server si spegne automaticamente quando il processo di grugnito esce

+0

Ottimo punto - ma sfortunatamente no. Sto lavorando con Wintersmith come generatore di siti (che utilizza un server Connect), ma voglio evitare di dover duplicare quella logica per il server di anteprima. – dtuckernet

1

Non so come questo funziona con grugnito-shell. Ma se si impostare un compito grugnito personalizzato per eseguire il server si potrebbe provare a somthing come:

var spawn = require('child_process').spawn; 
    var server = spawn('myserver', ['--foo']); 
    process.on('exit', function() { 
    grunt.log.writeln('killing myserver...'); 
    server.kill(); 
    grunt.log.writeln('killed myserver'); 
    }); 
+1

Ho provato che senza successo (nessun messaggio scritto o server ucciso), sfortunatamente. – Pat

+0

Questa è la migliore risposta a mio gusto. semplice, dritto al punto. nessuna curva di apprendimento .. Suppongo davvero di non usare le librerie se qualcosa è così semplice. Tecnicamente, il plugin della shell grunt avrebbe dovuto farlo internamente. una semplice signorina. –

0

A quanto pare, grunt-shell non gestisce process eventi di uscita: https://github.com/sindresorhus/grunt-shell/blob/master/tasks/shell.js

Pertanto, ho il sospetto che il processo di grugnito sta uscendo e grunt-shell mai mette in guardia il suo processo figlio che il processo padre si ferma.

Per esempio, grunt-concurrent fa uccide è processi figli, come si può vedere qui:

process.on('exit', function() { 
    cpCache.forEach(function (el) { 
     el.kill(); 
    }); 
}); 

Fonte: https://github.com/sindresorhus/grunt-concurrent/blob/master/tasks/concurrent.js#L55

Quindi, utilizzando grunt-shell non funzionerà per voi.

Una soluzione è richiedere wintersmith nel file Grunt ed eseguirlo in modo programmatico in un'attività personalizzata.