mirror of
https://github.com/containers/kubernetes-mcp-server.git
synced 2025-10-23 01:22:57 +03:00
fix(npm): child process exits gracefully on SIGxxx (#241)
Signed-off-by: Marc Nuri <marc@marcnuri.com>
This commit is contained in:
@@ -21,7 +21,26 @@ const resolveBinaryPath = () => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
childProcess.execFileSync(resolveBinaryPath(), process.argv.slice(2), {
|
const child = childProcess.spawn(resolveBinaryPath(), process.argv.slice(2), {
|
||||||
stdio: 'inherit',
|
stdio: 'inherit',
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const handleSignal = () => (signal) => {
|
||||||
|
console.log(`Received ${signal}, terminating child process...`);
|
||||||
|
if (child && !child.killed) {
|
||||||
|
child.kill(signal);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
['SIGTERM', 'SIGINT', 'SIGHUP'].forEach((signal) => {
|
||||||
|
process.on(signal, handleSignal(signal));
|
||||||
|
});
|
||||||
|
|
||||||
|
child.on('close', (code, signal) => {
|
||||||
|
if (signal) {
|
||||||
|
console.log(`Child process terminated by signal: ${signal}`);
|
||||||
|
process.exit(128 + (signal === 'SIGTERM' ? 15 : signal === 'SIGINT' ? 2 : 1));
|
||||||
|
} else {
|
||||||
|
process.exit(code || 0);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ func Serve(ctx context.Context, mcpServer *mcp.Server, staticConfig *config.Stat
|
|||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
sigChan := make(chan os.Signal, 1)
|
sigChan := make(chan os.Signal, 1)
|
||||||
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
|
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGHUP, syscall.SIGTERM)
|
||||||
|
|
||||||
serverErr := make(chan error, 1)
|
serverErr := make(chan error, 1)
|
||||||
go func() {
|
go func() {
|
||||||
|
|||||||
Reference in New Issue
Block a user