2013-04-24 12 views
16

Obecnie próbuję wykonać kilka kroków, które wymagają odrodzenia zadań w procesach potomnych. Na przykład:Killing Spawned Processes, gdy Grunt wychodzi

  1. pliki Watch
  2. Rozruch mojego Static Generator witryna Preview Server

mogę łatwo użyć zadania jak grunt-concurrent mieć obie te uruchamiane jednocześnie. Jednak po wyjściu z pomruku proces potomny (w tym przypadku - generator statycznych witryn, który używam przy użyciu grunt-shell) nadal działa. Chciałbym, aby te zadania były uruchamiane jednocześnie - ale także by ich zabijano, gdy odchodzi.

Myśli?

Odpowiedz

0

czy jest jakiś powód, dla którego nie używasz programu contrib-connect w celu uruchomienia serwera w katalogu głównym projektu?

jeśli to możliwe to zrobić, zamiast używać grunt-shell, a serwer zostanie automatycznie wyłączony, gdy proces grunt wychodzi

+0

Świetny punkt - ale niestety nie. Pracuję z Wintersmith jako moim generatorem stron (który używa serwera Connect) - ale chcę uniknąć konieczności duplikowania tej logiki dla serwera podglądu. – dtuckernet

1

Nie wiem, jak to działa z grunt-shell. Ale jeśli chcesz skonfigurować niestandardowe zadanie grunt do uruchomienia serwera można spróbować somthing jak:

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

Próbowałem, że bez powodzenia (nie napisano wiadomość lub serwer zabity), niestety. – Pat

+0

To jest najlepsza odpowiedź w moim guście. proste, prosto do rzeczy. żadnych krzywych uczenia się. Naprawdę nie popieram korzystania z bibliotek, jeśli coś jest TAK proste. Technicznie, wtyczkowa wtyczka powinna to zrobić wewnętrznie. prosta chybiona. –

0

Najwyraźniej grunt-shell nie obsługuje process zdarzenia EXIT: https://github.com/sindresorhus/grunt-shell/blob/master/tasks/shell.js

Dlatego podejrzewam, że grunt jest proces wychodzenia i grunt-shell nigdy ostrzega, że ​​to dziecko, że proces proces nadrzędny jest zatrzymanie.

Na przykład grunt-concurrent nie zabija to procesy potomne, jak widać tutaj:

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

Źródło: https://github.com/sindresorhus/grunt-concurrent/blob/master/tasks/concurrent.js#L55

Więc korzystając grunt-shell nie będzie pracować dla Ciebie.

Jednym z rozwiązań jest wymaganie wintersmith w pliku Gruntfile i uruchomienie go programowo w niestandardowym zadaniu.