Грубо-параллельный и управляемый SIGINT

Я изо всех сил пытаюсь понять поведение, которое я вижу, когда использую grunt-concurrent и пытаюсь обработать SIGINT, и надеюсь, что кто-то сможет пролить на него свет. В основном: когда я использую обработчик SIGINT в моем function(grunt) { } декларация, почему только одна из параллельных задач видит 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, он запускается три раза - один раз для основной задачи, которую я выполнил (dev) и по одной для каждой из двух задач, которые выполнялись grunt-concurrent (watch а также nodemon:dev). Это явно не то, что я хотел.

Когда я перемещаю обработчик SIGINT в пределах function(grunt) { } метод, то когда я нажимаю CTRL-C, он запускается только один раз - для nodemon:dev задача. Что я не могу понять, так это почему я не вижу watch задача тоже (и для мастера параллельной задачи dev это увольняет их обоих!), и это как бы убивает меня... в основном потому, что я не хочу зависеть от этого поведения, когда не могу понять его и не могу быть уверенным, что оно не будет таким же все различные машины, на которых это приложение будет в конечном итоге.

Итак... мысли? Что мне здесь не хватает? Спасибо!

0 ответов

Другие вопросы по тегам