grunt-concurrent和处理SIGINT

时间:2014-07-24 02:24:57

标签: javascript node.js concurrency gruntjs grunt-concurrent

我正在努力理解我在使用grunt-concurrent并尝试处理SIGINT时所看到的行为,并希望有人可以对此有所了解。基本上:当我在function(grunt) { }声明中使用SIGINT处理程序时,为什么只有一个并发任务才能看到SIGINT?

简短设置:我正在使用grunt-concurrent来启动watch和nodemon任务;我的Gruntfile.js文件的确切并发节是:

concurrent: {
    dev: {
        options: {
            logConcurrentOutput: true
        },
        tasks: [ 'watch', 'nodemon:dev' ]
    }
}

我想观察SIGINT,所以当我按下CTRL-C时,我可以清理一些作为监视任务的一部分被复制的文件。我首先在Gruntfile.js函数声明之外的module.exports = function(grunt) { ... }末尾添加以下内容:

process.on('SIGINT', function() {
    console.log('Cleaning up after the dev server...');
    console.log(JSON.stringify(process.argv));
});

当它包含在那里并且我点击CTRL-C时,它运行三次 - 一次用于我运行的主要grunt任务(dev),并且一个用于grunt-concurrent运行的两个任务中的每一个({ {1}}和watch)。这显然不是我的意图。

当我在nodemon:dev方法中移动SIGINT处理程序时,当我按下CTRL-C时,它只运行一次 - 用于function(grunt) { }任务。我无法理解的是为什么我看到它也为nodemon:dev任务运行(以及主要的并发任务watch,它们都会关闭它们! ),它有点杀了我......主要是因为当我无法理解它时我不想依赖这种行为而且不能确定它在所有不同的机器上都不会相同这个应用程序将结束了。

所以......想法?我在这里错过了什么?谢谢!

0 个答案:

没有答案