diff --git a/packages/util/src/cross-spawn-spawner.ts b/packages/util/src/cross-spawn-spawner.ts index 0ca2cb156fc6..f583100363b5 100644 --- a/packages/util/src/cross-spawn-spawner.ts +++ b/packages/util/src/cross-spawn-spawner.ts @@ -266,6 +266,15 @@ const makeCrossSpawnSpawner = Effect.gen(function* () { }) proc.on("exit", (...args) => { exit = args + if (process.platform !== "win32") return + // Descendants can keep Windows stdio open after exit. Bound the EOF wait; + // the output pump still drains buffered chunks and flushes its file. + const drain = setTimeout(() => { + proc.stdout?.push(null) + proc.stderr?.push(null) + }, 200) + drain.unref() + proc.once("close", () => clearTimeout(drain)) }) proc.on("close", (...args) => { if (end) return