process: Send signal name to signal handlers
PR-URL: https://github.com/nodejs/node/pull/15606 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Evan Lucas <evanlucas@me.com> Reviewed-By: Gireesh Punathil <gpunathi@in.ibm.com> Reviewed-By: Bartosz Sosnowski <bartosz@janeasystems.com>
This commit is contained in:
parent
13db29b2f7
commit
9b2cf1c8eb
@ -350,6 +350,9 @@ Signal events will be emitted when the Node.js process receives a signal. Please
|
||||
refer to signal(7) for a listing of standard POSIX signal names such as
|
||||
`SIGINT`, `SIGHUP`, etc.
|
||||
|
||||
The signal handler will receive the signal's name (`'SIGINT'`,
|
||||
`'SIGTERM'`, etc.) as the first argument.
|
||||
|
||||
The name of each event will be the uppercase common name for the signal (e.g.
|
||||
`'SIGINT'` for `SIGINT` signals).
|
||||
|
||||
@ -362,6 +365,14 @@ process.stdin.resume();
|
||||
process.on('SIGINT', () => {
|
||||
console.log('Received SIGINT. Press Control-D to exit.');
|
||||
});
|
||||
|
||||
// Using a single function to handle multiple signals
|
||||
function handle(signal) {
|
||||
console.log(`Received ${signal}`);
|
||||
}
|
||||
|
||||
process.on('SIGINT', handle);
|
||||
process.on('SIGTERM', handle);
|
||||
```
|
||||
|
||||
*Note*: An easy way to send the `SIGINT` signal is with `<Ctrl>-C` in most
|
||||
|
@ -195,7 +195,7 @@ function setupSignalHandlers() {
|
||||
|
||||
wrap.unref();
|
||||
|
||||
wrap.onsignal = function() { process.emit(type); };
|
||||
wrap.onsignal = function() { process.emit(type, type); };
|
||||
|
||||
const signum = constants[type];
|
||||
const err = wrap.start(signum);
|
||||
|
24
test/parallel/test-signal-args.js
Normal file
24
test/parallel/test-signal-args.js
Normal file
@ -0,0 +1,24 @@
|
||||
'use strict';
|
||||
|
||||
const common = require('../common');
|
||||
const assert = require('assert');
|
||||
|
||||
if (common.isWindows) {
|
||||
common.skip('Sending signals with process.kill is not supported on Windows');
|
||||
}
|
||||
|
||||
process.once('SIGINT', common.mustCall((signal) => {
|
||||
assert.strictEqual(signal, 'SIGINT');
|
||||
}));
|
||||
|
||||
process.kill(process.pid, 'SIGINT');
|
||||
|
||||
process.once('SIGTERM', common.mustCall((signal) => {
|
||||
assert.strictEqual(signal, 'SIGTERM');
|
||||
}));
|
||||
|
||||
process.kill(process.pid, 'SIGTERM');
|
||||
|
||||
// Prevent Node.js from exiting due to empty event loop before signal handlers
|
||||
// are fired
|
||||
setImmediate(() => {});
|
Loading…
x
Reference in New Issue
Block a user