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:
Robert Rossmann 2017-09-25 11:28:00 +02:00 committed by James M Snell
parent 13db29b2f7
commit 9b2cf1c8eb
3 changed files with 36 additions and 1 deletions

View File

@ -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

View File

@ -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);

View 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(() => {});