Pour avoir un traiteur pour toutes les réponses, placer le code dans un module, par exemple, cleanup.js ci-dessous et de le transmettre à votre application spécifique de nettoyage de rappel. (Vous pouvez soin d'enlever la console.journal des opérations du code réel.)
// cleanup.js
// object to capture process exits and call app specific cleanup function...
function noOp() {};
exports.Cleanup = function Cleanup(callback) {
// attach user callback to the process event emitter
// if no callback, it will still exit gracefully on Ctrl-C
callback = callback || noOp;
process.on('cleanup',callback);
// do app specific cleaning before exiting
process.on('exit',
function () {
process.emit('cleanup');
}
);
// catch ctrl+c event and exit normally
process.on('SIGINT',
function () {
console.log('Ctrl-C...');
process.exit(2);
}
);
//catch uncaught exceptions, trace, then exit normally
process.on('uncaughtException',
function(e) {
console.log('Uncaught Exception...');
console.log(e.stack);
process.exit(99);
}
);
};
Ce code intercepte les exceptions non traitées, Ctrl-C, ou une sortie normale de l'événement, et appelle à un seul utilisateur en option fonction de nettoyage avant de quitter, de la manipulation de toutes les conditions de sortie avec un seul objet. Le module étend simplement le processus de l'objet au lieu de définir un autre événement de l'émetteur. Sans une application spécifique de rappel de nettoyage par défaut à un pas de l'op de la fonction. C'était suffisant pour mon utilisation où les processus enfants ont été laissés en cours d'exécution lorsque vous quittez en appuyant sur Ctrl-C. Vous pouvez facilement ajouter de la sortie d'autres événements tels que SIGHUP comme souhaité. Remarque: par NodeJS manuel, SIGKILL ne peut pas avoir un auditeur. Le test de code ci-dessous montre les différentes manières d'utiliser cleanup.js ...
// test cleanup.js on version 0.10.21
// loads module and registers app specific cleanup callback...
var cleanup = require('./cleanup').Cleanup(myCleanup);
//var cleanup = require('./cleanup').Cleanup(); // will call noOp
// defines app specific callback...
function myCleanup() {
console.log('My cleanup...');
// place app specific cleanup code here
};
// all of the following code only needed for test demo...
process.stdin.resume(); //so the program will not close instantly
// emits an uncaught exception when called because module does not exist
function error() {
console.log('error');
var x = require('');
};
// try each of the following one at a time...
// uncomment next line to test exiting on an uncaught exception
//setTimeout(error,2000);
// uncomment next line to text exiting normally
//setTimeout(function(){process.exit(3)},2000);
// type Ctrl-C to test forced exit