Files
kandev/apps/backend/internal/agentctl/server/shell/process_group_windows.go
T
2026-06-26 10:09:23 +01:00

44 lines
831 B
Go

//go:build windows
package shell
import (
"errors"
"fmt"
"os"
"os/exec"
"strings"
"syscall"
)
func configureShellProcess(cmd *exec.Cmd) {
cmd.SysProcAttr = &syscall.SysProcAttr{
CreationFlags: syscall.CREATE_NEW_PROCESS_GROUP,
}
}
func killShellProcessGroup(p *os.Process) error {
if p == nil {
return nil
}
if err := runShellTaskkill("/F", "/T", "/PID", fmt.Sprintf("%d", p.Pid)); err != nil {
if killErr := p.Kill(); killErr != nil && !errors.Is(killErr, os.ErrProcessDone) {
return errors.Join(err, killErr)
}
return err
}
return nil
}
func runShellTaskkill(args ...string) error {
output, err := exec.Command("taskkill", args...).CombinedOutput()
if err == nil {
return nil
}
msg := strings.TrimSpace(string(output))
if msg == "" {
return err
}
return fmt.Errorf("%w: %s", err, msg)
}