last-words
v1.0.0
Published
Run some (cleanup) code before the process exits.
Downloads
21
Readme
Last Words
Run some (cleanup) code before the process exits.
Listens to:
['SIGTERM', 'SIGINT', 'SIGQUIT', 'SIGHUP', 'SIGBREAK']
cb(false)
- Node exits when event loop is emptied
uncaughtExceptionMonitor
cb(true, err)
onuncaughtException
(andunhandledRejection
based on--unhandled-rejections
flag)- Node logs the error to
stderr
and exits
exit
cb(true)
- Node exits
Usage
const onExit = require('last-words')
onExit((
abort, // true / false
err // instanceof Error when `uncaughtException`/`unhandledRejection`
) => {
if (abort) {
// only perform sync tasks
} else {
// can perform async tasks
}
})
Considerations
It does not explicitly kill the process and will be terminated by Node when the event loop is emptied. Therefore, if you forget to cleanup some holding processes, it will not be terminated.
If the process is killed with "preventable" signals (other than e.g.
SIGKILL
or explicitprocess.exit()
), the callback will be invoked twice. Once withabort = false
and again withabort = true
. An exception isuncaughtException
/unhandledRejection
- those will callback twice withabort = true
Alternatives and differences
It calls a hook on exiting when there is time for async cleanup and when there is not and let Node exit naturally. If there is something still holding the process, it doesn't timeout, thus allowing spotting developer bugs.
There are alternatives out there developed to tackle the same task. Most of them
are either not maintained anymore, an overkill with functionality, exits the
process explicitly or handles and prevents uncaughtException
by default.
- calls
process.exit
explicitly - custom hooks
- async timeout
uncaughtException
/unhandledRejection
hooks (can not opt-out)- hooks cleanup functionality
- calls
- calls
process.exit
explicitly - custom hooks
- async timeout
uncaughtException
/unhandledRejection
hooks- hooks cleanup functionality
- calls
- calls
process.exit
explicitly uncaughtException
hook (can not opt-out)- custom hooks
- custom
stderr
messages
- calls
uncaughtException
hook