everything-dev
Version:
A consolidated product package for building Module Federation apps with oRPC APIs.
44 lines (42 loc) • 1.4 kB
JavaScript
const require_process_registry = require('./process-registry.cjs');
let effect = require("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.Effect.gen(function* () {
const deadline = (yield* effect.Clock.currentTimeMillis) + timeoutMs;
while (require_process_registry.isPidAlive(pid)) {
if ((yield* effect.Clock.currentTimeMillis) >= deadline) return false;
yield* effect.Effect.sleep(POLL_INTERVAL_MS);
}
return true;
});
const killProcessGroupEscalating = (pid, options) => effect.Effect.gen(function* () {
const terminateMs = options?.terminateMs ?? DEFAULT_TERMINATE_MS;
const signal = options?.signal ?? "SIGTERM";
if (pid <= 1 || pid === process.pid) return;
if (!require_process_registry.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
exports.killProcessGroupEscalating = killProcessGroupEscalating;
exports.reapGroup = reapGroup;
//# sourceMappingURL=process-kill.cjs.map