55 lines
1.0 KiB
Go
55 lines
1.0 KiB
Go
//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()
|
|
}
|