From b580fd6471287de4a7c77b0aa5b889464319b079 Mon Sep 17 00:00:00 2001 From: Manuel Schiller Date: Tue, 30 Dec 2025 13:47:00 +0100 Subject: [PATCH 1/2] fix: Kill prerendering child process when the vite preview server closes --- src/build/vite/preview.ts | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/build/vite/preview.ts b/src/build/vite/preview.ts index 0e9f95970a..a3bfb18401 100644 --- a/src/build/vite/preview.ts +++ b/src/build/vite/preview.ts @@ -79,15 +79,25 @@ export function nitroPreviewPlugin(ctx: NitroPluginContext): VitePlugin { PORT: String(randomPort), }, }); + + const killChild = (signal: NodeJS.Signals = "SIGTERM") => { + if (child && !child.killed) { + child.kill(signal); + } + }; + for (const sig of ["SIGINT", "SIGHUP"] as const) { process.once(sig, () => { consola.info(`Stopping preview server...`); - if (child.killed === false) { - child.kill(sig); - process.exit(); - } + killChild(sig); + process.exit(); }); } + + server.httpServer.on("close", () => { + killChild(); + }); + child.on("exit", (code) => { if (code && code !== 0) { consola.error(`[nitro] Preview server exited with code ${code}`); From feb83c49de04561b538847a7f3a14699dea36051 Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Tue, 30 Dec 2025 13:52:08 +0100 Subject: [PATCH 2/2] use once --- src/build/vite/preview.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/build/vite/preview.ts b/src/build/vite/preview.ts index a3bfb18401..9dd5c4ebc1 100644 --- a/src/build/vite/preview.ts +++ b/src/build/vite/preview.ts @@ -80,7 +80,7 @@ export function nitroPreviewPlugin(ctx: NitroPluginContext): VitePlugin { }, }); - const killChild = (signal: NodeJS.Signals = "SIGTERM") => { + const killChild = (signal: NodeJS.Signals) => { if (child && !child.killed) { child.kill(signal); } @@ -94,11 +94,11 @@ export function nitroPreviewPlugin(ctx: NitroPluginContext): VitePlugin { }); } - server.httpServer.on("close", () => { - killChild(); + server.httpServer.once("close", () => { + killChild("SIGTERM"); }); - child.on("exit", (code) => { + child.once("exit", (code) => { if (code && code !== 0) { consola.error(`[nitro] Preview server exited with code ${code}`); }