Skip to content

Commit 2ca9f4b

Browse files
huseyinacacak-janearuyadorno
authored andcommitted
src: fix kill signal on Windows
Fixes: #42923 PR-URL: #55514 Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Stefan Stojanovic <stefan.stojanovic@janeasystems.com>
1 parent 3ba9b57 commit 2ca9f4b

File tree

3 files changed

+27
-2
lines changed

3 files changed

+27
-2
lines changed

doc/api/child_process.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1700,8 +1700,8 @@ may not actually terminate the process.
17001700
See kill(2) for reference.
17011701
17021702
On Windows, where POSIX signals do not exist, the `signal` argument will be
1703-
ignored, and the process will be killed forcefully and abruptly (similar to
1704-
`'SIGKILL'`).
1703+
ignored except for `'SIGKILL'`, `'SIGTERM'`, `'SIGINT'` and `'SIGQUIT'`, and the
1704+
process will always be killed forcefully and abruptly (similar to `'SIGKILL'`).
17051705
See [Signal Events][] for more details.
17061706
17071707
On Linux, child processes of child processes will not be terminated

src/process_wrap.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,12 @@ class ProcessWrap : public HandleWrap {
314314
ProcessWrap* wrap;
315315
ASSIGN_OR_RETURN_UNWRAP(&wrap, args.This());
316316
int signal = args[0]->Int32Value(env->context()).FromJust();
317+
#ifdef _WIN32
318+
if (signal != SIGKILL && signal != SIGTERM && signal != SIGINT &&
319+
signal != SIGQUIT) {
320+
signal = SIGKILL;
321+
}
322+
#endif
317323
int err = uv_process_kill(&wrap->process_, signal);
318324
args.GetReturnValue().Set(err);
319325
}

test/parallel/test-child-process-kill.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,22 @@ assert.strictEqual(cat.signalCode, null);
3939
assert.strictEqual(cat.killed, false);
4040
cat.kill();
4141
assert.strictEqual(cat.killed, true);
42+
43+
// Test different types of kill signals on Windows.
44+
if (common.isWindows) {
45+
for (const sendSignal of ['SIGTERM', 'SIGKILL', 'SIGQUIT', 'SIGINT']) {
46+
const process = spawn('cmd');
47+
process.on('exit', (code, signal) => {
48+
assert.strictEqual(code, null);
49+
assert.strictEqual(signal, sendSignal);
50+
});
51+
process.kill(sendSignal);
52+
}
53+
54+
const process = spawn('cmd');
55+
process.on('exit', (code, signal) => {
56+
assert.strictEqual(code, null);
57+
assert.strictEqual(signal, 'SIGKILL');
58+
});
59+
process.kill('SIGHUP');
60+
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy