UNPKG

everything-dev

Version:

A consolidated product package for building Module Federation apps with oRPC APIs.

43 lines (41 loc) • 1.26 kB
import { isPidAlive } from "./process-registry.mjs"; import { Clock, Effect } from "effect"; //#region src/process-kill.ts const DEFAULT_TERMINATE_MS = 5e3; const POLL_INTERVAL_MS = 250; const groupKill = (pid, signal) => { try { process.kill(-pid, signal); } catch { try { process.kill(pid, signal); } catch {} } }; const waitGone = (pid, timeoutMs) => Effect.gen(function* () { const deadline = (yield* Clock.currentTimeMillis) + timeoutMs; while (isPidAlive(pid)) { if ((yield* Clock.currentTimeMillis) >= deadline) return false; yield* Effect.sleep(POLL_INTERVAL_MS); } return true; }); const killProcessGroupEscalating = (pid, options) => Effect.gen(function* () { const terminateMs = options?.terminateMs ?? DEFAULT_TERMINATE_MS; const signal = options?.signal ?? "SIGTERM"; if (pid <= 1 || pid === process.pid) return; if (!isPidAlive(pid)) return; groupKill(pid, signal); if (signal === "SIGKILL") return; if (!(yield* waitGone(pid, terminateMs))) { groupKill(pid, "SIGKILL"); yield* waitGone(pid, 1e3); } }); const reapGroup = (pid) => { if (pid <= 1 || pid === process.pid) return; groupKill(pid, "SIGKILL"); }; //#endregion export { killProcessGroupEscalating, reapGroup }; //# sourceMappingURL=process-kill.mjs.map