process: document kill(0), disallow kill(O_RDWR)

The null signal test existed, but only tested the case where the target
process existed, not when it did not exist.

Also clarified that SIGUSR1 is reserved by Node.js only for receiveing,
its not at all reserved when sending a signal with kill().

kill(pid, 'O_RDWR'), or any other node constant, "worked". I fixed this
by also checking for 'SIG'. The same as done in the isSignal() function.
Now the signal names supported by process.kill() are the same as those
supported by process.on().
This commit is contained in:
Sam Roberts 2013-10-10 22:28:01 -07:00 committed by Trevor Norris
parent 9b8fcff435
commit 8aac118b69
3 changed files with 14 additions and 4 deletions

View File

@ -421,6 +421,9 @@ string describing the signal to send. Signal names are strings like
'SIGINT' or 'SIGHUP'. If omitted, the signal will be 'SIGTERM'.
See kill(2) for more information.
Will throw an error if target does not exist, and as a special case, a signal of
`0` can be used to test for the existence of a process.
Note that just because the name of this function is `process.kill`, it is
really just a signal sender, like the `kill` system call. The signal sent
may do something other than kill the target process.
@ -438,8 +441,8 @@ Example of sending a signal to yourself:
process.kill(process.pid, 'SIGHUP');
Note: SIGUSR1 is reserved by node.js. It can be used to kickstart the
debugger.
Note: When SIGUSR1 is received by Node.js it starts the debugger, see
[Signal Events](#process_signal_events).
## process.pid

View File

@ -717,7 +717,8 @@
r = process._kill(pid, 0);
} else {
sig = sig || 'SIGTERM';
if (startup.lazyConstants()[sig]) {
if (startup.lazyConstants()[sig] &&
sig.slice(0, 3) === 'SIG') {
r = process._kill(pid, startup.lazyConstants()[sig]);
} else {
throw new Error('Unknown signal: ' + sig);

View File

@ -27,7 +27,13 @@ var spawn = require('child_process').spawn;
var cat = spawn('cat');
var called;
process.kill(cat.pid, 0);
assert.ok(process.kill(cat.pid, 0));
cat.on('exit', function() {
assert.throws(function() {
process.kill(cat.pid, 0);
}, Error);
});
cat.stdout.on('data', function() {
called = true;