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.
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user