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 refer to signal(7) for a listing of standard POSIX signal names such as
`SIGINT`, `SIGHUP`, etc. `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. The name of each event will be the uppercase common name for the signal (e.g.
`'SIGINT'` for `SIGINT` signals). `'SIGINT'` for `SIGINT` signals).
@ -362,6 +365,14 @@ process.stdin.resume();
process.on('SIGINT', () => { process.on('SIGINT', () => {
console.log('Received SIGINT. Press Control-D to exit.'); 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 *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.unref();
wrap.onsignal = function() { process.emit(type); }; wrap.onsignal = function() { process.emit(type, type); };
const signum = constants[type]; const signum = constants[type];
const err = wrap.start(signum); 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(() => {});