我目前正在尝试执行几个需要将任务生成到子进程中的步骤。例如:
- 观看文件
- 启动我的静态站点生成器的预览服务器
我可以轻松地使用诸如grunt-concurrent之类的任务来同时运行这两个任务。但是,当我退出 grunt 时,子进程(在这种情况下 - 我正在使用grunt-shell运行的静态站点生成器)继续运行。我想让这些任务同时运行 - 但也让它们在 grunt 退出时被杀死。
想法?
我目前正在尝试执行几个需要将任务生成到子进程中的步骤。例如:
我可以轻松地使用诸如grunt-concurrent之类的任务来同时运行这两个任务。但是,当我退出 grunt 时,子进程(在这种情况下 - 我正在使用grunt-shell运行的静态站点生成器)继续运行。我想让这些任务同时运行 - 但也让它们在 grunt 退出时被杀死。
想法?
不确定这如何与 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');
});
是否有某些原因您不使用 grunt-contrib-connect 在项目根目录中启动服务器?
如果可能的话,不要使用 grunt-shell,并且当你的 grunt 进程退出时服务器将自动关闭
也许这就是创建grunt-exit的原因。
显然,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
在您的 Gruntfile 中要求并在自定义任务中以编程方式运行它。
请参阅我在https://stackoverflow.com/a/32057486/626810上的回答。
当您有一个明确需要调用的脚本(例如:当该进程被守护时)时,这很有用。