diff --git a/ext/node/polyfills/process.ts b/ext/node/polyfills/process.ts index 82f92ebafc..3dc6ce61aa 100644 --- a/ext/node/polyfills/process.ts +++ b/ext/node/polyfills/process.ts @@ -517,6 +517,12 @@ Process.prototype.on = function ( // Ignores SIGBREAK if the platform is not windows. } else if (event === "SIGTERM" && Deno.build.os === "windows") { // Ignores SIGTERM on windows. + } else if ( + event !== "SIGBREAK" && event !== "SIGINT" && Deno.build.os === "windows" + ) { + // Ignores all signals except SIGBREAK and SIGINT on windows. + // deno-lint-ignore no-console + console.warn(`Ignoring signal "${event}" on Windows`); } else { EventEmitter.prototype.on.call(this, event, listener); Deno.addSignalListener(event as Deno.Signal, listener); @@ -541,8 +547,10 @@ Process.prototype.off = function ( } else if (event.startsWith("SIG")) { if (event === "SIGBREAK" && Deno.build.os !== "windows") { // Ignores SIGBREAK if the platform is not windows. - } else if (event === "SIGTERM" && Deno.build.os === "windows") { - // Ignores SIGTERM on windows. + } else if ( + event !== "SIGBREAK" && event !== "SIGINT" && Deno.build.os === "windows" + ) { + // Ignores all signals except SIGBREAK and SIGINT on windows. } else { EventEmitter.prototype.off.call(this, event, listener); Deno.removeSignalListener(event as Deno.Signal, listener); diff --git a/tests/unit_node/process_test.ts b/tests/unit_node/process_test.ts index 944686a87b..add9e1280a 100644 --- a/tests/unit_node/process_test.ts +++ b/tests/unit_node/process_test.ts @@ -25,6 +25,7 @@ import { assertThrows, fail, } from "@std/assert"; +import { assertSpyCall, assertSpyCalls, spy } from "@std/testing/mock"; import { stripAnsiCode } from "@std/fmt/colors"; import * as path from "@std/path"; import { delay } from "@std/async/delay"; @@ -238,6 +239,33 @@ Deno.test({ }, }); +Deno.test({ + name: "process.on - ignored signals on windows", + ignore: Deno.build.os !== "windows", + fn() { + const ignoredSignals = ["SIGHUP", "SIGUSR1", "SIGUSR2"]; + + for (const signal of ignoredSignals) { + using consoleSpy = spy(console, "warn"); + const handler = () => {}; + process.on(signal, handler); + process.off(signal, handler); + assertSpyCall(consoleSpy, 0, { + args: [`Ignoring signal "${signal}" on Windows`], + }); + } + + { + using consoleSpy = spy(console, "warn"); + const handler = () => {}; + process.on("SIGTERM", handler); + process.off("SIGTERM", handler); + // No warning is made for SIGTERM + assertSpyCalls(consoleSpy, 0); + } + }, +}); + Deno.test( { permissions: { run: true, read: true } }, async function processKill() {