//go:build windows package main import ( "os/exec" "strconv" "syscall" ) const windowsBelowNormalPriorityClass = 0x00004000 const windowsCreateNewProcessGroup = 0x00000200 func applyTrainingLowPriorityBeforeStart(cmd *exec.Cmd, enabled bool) { if cmd == nil { return } if cmd.SysProcAttr == nil { cmd.SysProcAttr = &syscall.SysProcAttr{} } if enabled { cmd.SysProcAttr.CreationFlags |= windowsBelowNormalPriorityClass } } func applyTrainingLowPriorityAfterStart(cmd *exec.Cmd, enabled bool) { _ = cmd _ = enabled } func prepareTrainingCommandForCancel(cmd *exec.Cmd) { if cmd == nil { return } if cmd.SysProcAttr == nil { cmd.SysProcAttr = &syscall.SysProcAttr{} } cmd.SysProcAttr.CreationFlags |= windowsCreateNewProcessGroup } func terminateTrainingCommand(cmd *exec.Cmd) { if cmd == nil || cmd.Process == nil || cmd.Process.Pid <= 0 { return } killCmd := exec.Command("taskkill", "/PID", strconv.Itoa(cmd.Process.Pid), "/T", "/F") hideCommandWindow(killCmd) _ = killCmd.Run() _ = cmd.Process.Kill() }