1 Commits

Author SHA1 Message Date
76225c6b9f fix(lifecycle): use process group kill (-pid) in handleExit safety net
With detached:true children, the synchronous exit handler must kill
the entire process group, not just the direct PID.
2026-03-04 00:48:38 +00:00
2 changed files with 11 additions and 4 deletions

View File

@@ -1,6 +1,6 @@
{
"name": "@push.rocks/smartexit",
"version": "2.0.1",
"version": "2.0.2",
"private": false,
"description": "A library for managing graceful shutdowns of Node.js processes by handling cleanup operations, including terminating child processes.",
"main": "dist_ts/index.js",

View File

@@ -187,18 +187,25 @@ export class ProcessLifecycle {
});
}
/** Synchronous last-resort: SIGKILL any remaining tracked PIDs. */
/** Synchronous last-resort: SIGKILL any remaining tracked process groups. */
private handleExit(): void {
const instances = ProcessLifecycle.getInstances();
let killed = 0;
for (const instance of instances) {
for (const pid of instance.trackedPids) {
// Kill entire process group (negative PID) for detached children
try {
process.kill(pid, 'SIGKILL');
process.kill(-pid, 'SIGKILL');
killed++;
} catch {
// Process already dead
// Process group may not exist, try single PID
try {
process.kill(pid, 'SIGKILL');
killed++;
} catch {
// Process already dead
}
}
}
}