Грубо-параллельный и управляемый 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
это увольняет их обоих!), и это как бы убивает меня... в основном потому, что я не хочу зависеть от этого поведения, когда не могу понять его и не могу быть уверенным, что оно не будет таким же все различные машины, на которых это приложение будет в конечном итоге.
Итак... мысли? Что мне здесь не хватает? Спасибо!