import type { ChildProcess } from "node:child_process" ;
import process from "node:process" ;
export type ChildProcessBridgeOptions = {
signals?: NodeJS.Signals[];
onSignal?: (signal: NodeJS.Signals) => void ;
};
const defaultSignals: NodeJS.Signals[] =
process.platform === "win32"
? ["SIGTERM" , "SIGINT" , "SIGBREAK" ]
: ["SIGTERM" , "SIGINT" , "SIGHUP" , "SIGQUIT" ];
export function attachChildProcessBridge(
child: ChildProcess,
{ signals = defaultSignals, onSignal }: ChildProcessBridgeOptions = {},
): { detach: () => void } {
const listeners = new Map<NodeJS.Signals, () => void >();
for (const signal of signals) {
const listener = (): void => {
onSignal?.(signal);
try {
child.kill(signal);
} catch {
// ignore
}
};
try {
process.on(signal, listener);
listeners.set(signal, listener);
} catch {
// Unsupported signal on this platform.
}
}
const detach = (): void => {
for (const [signal, listener] of listeners) {
process.off(signal, listener);
}
listeners.clear();
};
child.once("exit" , detach);
child.once("error" , detach);
return { detach };
}
Messung V0.5 in Prozent C=96 H=82 G=89
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-06-10)
¤
*© Formatika GbR, Deutschland