From dc43d6dc51e58c94174e5ea07f6664401cc2f2ef Mon Sep 17 00:00:00 2001 From: Cheikh Seck Date: Sat, 4 Apr 2026 13:48:43 +0000 Subject: [PATCH] Added Windows support in setProcessGroup --- internal/mcp/bash.go | 5 +---- internal/mcp/bash_unix.go | 7 +++++++ internal/mcp/bash_windows.go | 11 +++++++++++ 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/internal/mcp/bash.go b/internal/mcp/bash.go index b67f4b2..740bf16 100644 --- a/internal/mcp/bash.go +++ b/internal/mcp/bash.go @@ -11,7 +11,6 @@ import ( "os/exec" "path/filepath" "regexp" - "runtime" "strings" "sync" "syscall" @@ -430,9 +429,7 @@ func (s *BashServer) runBackgroundJob(ctx context.Context, command string, timeo jobID := s.jobTracker.Add(job) cmd := exec.CommandContext(jobCtx, "sh", "-c", command) - if runtime.GOOS != "windows" { - cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true} - } + setProcessGroup(cmd) if workingDir != "" { cmd.Dir = workingDir } diff --git a/internal/mcp/bash_unix.go b/internal/mcp/bash_unix.go index 4a9f3e6..d0af812 100644 --- a/internal/mcp/bash_unix.go +++ b/internal/mcp/bash_unix.go @@ -32,6 +32,13 @@ func killProcessGroup(targetPID int, removeTracking func()) (string, error) { return "", nil } +func setProcessGroup(cmd *exec.Cmd) { + if cmd == nil { + return + } + cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true} +} + // GetUnixTools returns the list of tools that are only available on Unix systems (mac, linux) func GetUnixTools() []Tool { return []Tool{ diff --git a/internal/mcp/bash_windows.go b/internal/mcp/bash_windows.go index e20a961..3bed278 100644 --- a/internal/mcp/bash_windows.go +++ b/internal/mcp/bash_windows.go @@ -7,6 +7,7 @@ import ( "errors" "fmt" "os" + "os/exec" "syscall" ) @@ -28,6 +29,16 @@ func killProcessGroup(targetPID int, removeTracking func()) (string, error) { return fmt.Sprintf("Killed process %d", targetPID), nil } +func setProcessGroup(cmd *exec.Cmd) { + if cmd == nil { + return + } + if cmd.SysProcAttr == nil { + cmd.SysProcAttr = &syscall.SysProcAttr{} + } + cmd.SysProcAttr.CreationFlags |= syscall.CREATE_NEW_PROCESS_GROUP +} + // GetUnixTools returns an empty list on Windows (not supported) func GetUnixTools() []Tool {