17

我目前正在尝试执行几个需要将任务生成到子进程中的步骤。例如:

  1. 观看文件
  2. 启动我的静态站点生成器的预览服务器

我可以轻松地使用诸如grunt-concurrent之类的任务来同时运行这两个任务。但是,当我退出 grunt 时,子进程(在这种情况下 - 我正在使用grunt-shell运行的静态站点生成器)继续运行。我想让这些任务同时运行 - 但也让它们在 grunt 退出时被杀死。

想法?

4

5 回答 5

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');
  });
于 2013-05-24T13:02:33.007 回答
0

是否有某些原因您不使用 grunt-contrib-connect 在项目根目录中启动服务器?

如果可能的话,不要使用 grunt-shell,并且当你的 grunt 进程退出时服务器将自动关闭

于 2013-05-07T14:52:02.287 回答
0

也许这就是创建grunt-exit的原因。

于 2014-03-26T20:54:50.540 回答
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对你不起作用。

一种解决方案是wintersmith在您的 Gruntfile 中要求并在自定义任务中以编程方式运行它。

于 2015-01-07T23:25:34.020 回答
0

请参阅我在https://stackoverflow.com/a/32057486/626810上的回答。

当您有一个明确需要调用的脚本(例如:当该进程被守护时)时,这很有用。

于 2015-08-17T18:45:49.850 回答