Après avoir joué avec une autre réponse, voici ma solution pour cette tâche. L'implémentation de cette manière m'aide à centraliser le nettoyage en un seul endroit, évitant une double manipulation du nettoyage.
- Je voudrais acheminer tous les autres codes sortants vers le code «exit».
const others = [`SIGINT`, `SIGUSR1`, `SIGUSR2`, `uncaughtException`, `SIGTERM`]
others.forEach((eventType) => {
process.on(eventType, exitRouter.bind(null, { exit: true }));
})
- Ce que fait exitRouter, c'est appeler process.exit ()
function exitRouter(options, exitCode) {
if (exitCode || exitCode === 0) console.log(`ExitCode ${exitCode}`);
if (options.exit) process.exit();
}
- À la «sortie», gérez le nettoyage avec une nouvelle fonction
function exitHandler(exitCode) {
console.log(`ExitCode ${exitCode}`);
console.log('Exiting finally...')
}
process.on('exit', exitHandler)
Aux fins de démonstration, ceci est un lien vers mon essentiel. Dans le fichier, j'ajoute un setTimeout pour simuler le processus en cours.
Si vous exécutez node node-exit-demo.jset ne faites rien, après 2 secondes, vous voyez le journal:
The service is finish after a while.
ExitCode 0
Exiting finally...
Sinon, si avant la fin du service, vous terminez par ctrl+C, vous verrez:
^CExitCode SIGINT
ExitCode 0
Exiting finally...
Ce qui s'est passé, c'est que le processus Node est sorti initialement avec le code SIGINT, puis il est dirigé vers process.exit () et finalement quitté avec le code de sortie 0.