我目前正在尝试执行几个步骤,这些步骤需要将任务生成到子进程中。例如:
我可以轻松使用grunt-concurrent之类的任务同时运行这两项任务。但是,当我退出grunt时,子进程(在这种情况下 - 我使用grunt-shell运行的静态站点生成器)继续运行。我想让这些任务同时运行 - 但是当grunt退出时也会让它们被杀死。
思想?
答案 0 :(得分: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');
});
答案 1 :(得分:0)
有什么理由不使用grunt-contrib-connect在项目根目录中启动服务器?
如果可能,请执行此操作而不是使用grunt-shell,并且当您的grunt进程退出时服务器将自动关闭
答案 2 :(得分:0)
也许这就是创建grunt-exit的原因。
答案 3 :(得分:0)
显然,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
不会为你工作。
一种解决方案是在Gruntfile中要求wintersmith
并在自定义任务中以编程方式运行它。
答案 4 :(得分:0)
请参阅https://stackoverflow.com/a/32057486/626810上的答案。
当您有一个明确需要调用的脚本时(例如:当该进程被守护进程时),这非常有用。