Yet another POSIX signal handler.
- Ensures provided functions are called before any other event listeners and are run concurrently, minimizing shutdown time.
- Works with any combination of synchronous and asynchronous functions.
- Ensures a clean exit if all functions resolve/return.
- Exits with an error if any functions reject/throw.
- Ensures processes exit cleanly, even when they have asynchronous shut-down functions and the Node debugger is in use. (See this issue)
npm i @darkobits/adeiu
Adeiu accepts an asynchronous or synchronous handler function. By default, the handler will be registered to respond to the following signals:
SIGINT
SIGQUIT
SIGTERM
SIGUSR2
import adeiu from '@darkobits/adeiu';
adeiu(async signal => {
console.log(`Received signal ${signal}; performing shut-down tasks...`);
await someAsyncStuff();
console.log('All done!');
});
Adeiu returns a function that can be invoked to unregister a handler.
import adeiu from '@darkobits/adeiu';
const unregister = adeiu(() => {
// Handler implementation here.
});
// Un-register the handler.
unregister();
Usually, responding to signals dynamically can be accomplished by inspecting the signal
argument
passed to your handler. However, if it is important that handlers are only invoked for a particular
signal, or if you'd like to respond to signals other than the defaults, you may optionally provide an
array of signals as a second argument:
import adeiu from '@darkobits/adeiu';
// Register callback that will _only_ be invoked on SIGINT:
adeiu(() => {
// SIGINT cleanup tasks.
}, ['SIGINT']);
import adeiu from '@darkobits/adeiu';
// Register callback with the default signals _and_ SIGUSR1:
adeiu(() => {
// Custom cleanup tasks.
}, [...adeiu.SIGNALS, 'SIGUSR1']);
![](https://user-images.githubusercontent.com/441546/189774318-67cf3578-f4b4-4dcc-ab5a-c8210fbb6838.png)