summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Roberts <sam@strongloop.com>2013-10-10 22:28:01 -0700
committerTrevor Norris <trev.norris@gmail.com>2013-12-02 10:41:37 -0800
commit8aac118b69a10a134e57e8e066c56ba7370d25cc (patch)
treee15798b61427bf1ab3b39224be958cfab7243894
parent9b8fcff43575592ace3d391ee47184f98ed755df (diff)
downloadnode-8aac118b69a10a134e57e8e066c56ba7370d25cc.tar.gz
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().
-rw-r--r--doc/api/process.markdown7
-rw-r--r--src/node.js3
-rw-r--r--test/simple/test-process-kill-null.js8
3 files changed, 14 insertions, 4 deletions
diff --git a/doc/api/process.markdown b/doc/api/process.markdown
index d36af6b5a..0514f5e2e 100644
--- a/doc/api/process.markdown
+++ b/doc/api/process.markdown
@@ -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
diff --git a/src/node.js b/src/node.js
index e5833cb5c..375bdfa18 100644
--- a/src/node.js
+++ b/src/node.js
@@ -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);
diff --git a/test/simple/test-process-kill-null.js b/test/simple/test-process-kill-null.js
index 708e27dff..520210ef1 100644
--- a/test/simple/test-process-kill-null.js
+++ b/test/simple/test-process-kill-null.js
@@ -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;