Убивание порожденных процессов при выходе Grunt
В настоящее время я пытаюсь выполнить несколько шагов, требующих создания задач для дочерних процессов. Например:
- Смотреть файлы
- Запустите сервер предварительного просмотра генератора статических сайтов.
Я могу легко использовать такие задачи, как grunt-concurrent, чтобы обе эти операции выполнялись одновременно. Однако, когда я заканчиваю хрюкать, дочерний процесс (в этом случае - статический генератор сайта, который я запускаю с помощью grunt-shell), продолжает работать. Я хотел бы, чтобы эти задачи выполнялись одновременно, - но также их можно убить, когда выходите из-под контроля.
Мысли?
Ответы
Ответ 1
Не знаю, как это работает с grunt-shell. Но если вы настроили пользовательскую задачу grunt для запуска своего сервера, вы можете попробовать что-то вроде:
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');
});
Ответ 2
Есть ли какая-то причина, по которой вы не используете grunt-contrib-connect для запуска сервера в корне вашего проекта?
если это возможно, вместо использования grunt-shell, и сервер автоматически отключится, когда ваш процесс grunt завершит
Ответ 3
Возможно, поэтому grunt-exit был создан.
Ответ 4
По-видимому, grunt-shell
не обрабатывает события выхода process
: https://github.com/sindresorhus/grunt-shell/blob/master/tasks/shell.js
Поэтому я подозреваю, что ваш процесс grunt завершается, а grunt-shell
никогда не предупреждает о его дочернем процессе, который останавливает родительский процесс.
Например, grunt-concurrent
убивает его дочерние процессы, как мы можем видеть здесь:
process.on('exit', function () {
cpCache.forEach(function (el) {
el.kill();
});
});
Источник: https://github.com/sindresorhus/grunt-concurrent/blob/master/tasks/concurrent.js#L55
Таким образом, использование grunt-shell
не будет работать для вас.
Одним из решений является требование wintersmith
в вашем файле Grunt и его программное программирование в пользовательской задаче.
Ответ 5
См. мой ответ на fooobar.com/info/328432/....
Это полезно, если у вас есть script, который явно необходимо вызвать (например: когда этот процесс будет демоннизирован).