//go:build !windows package main import ( "os/exec" "syscall" "time" ) func applyTrainingLowPriorityBeforeStart(cmd *exec.Cmd, enabled bool) { _ = cmd _ = enabled } func applyTrainingLowPriorityAfterStart(cmd *exec.Cmd, enabled bool) { if cmd == nil || cmd.Process == nil || !enabled { return } _ = syscall.Setpriority(syscall.PRIO_PROCESS, cmd.Process.Pid, 10) } func prepareTrainingCommandForCancel(cmd *exec.Cmd) { if cmd == nil { return } if cmd.SysProcAttr == nil { cmd.SysProcAttr = &syscall.SysProcAttr{} } cmd.SysProcAttr.Setpgid = true } func terminateTrainingCommand(cmd *exec.Cmd) { if cmd == nil || cmd.Process == nil || cmd.Process.Pid <= 0 { return } pid := cmd.Process.Pid _ = syscall.Kill(-pid, syscall.SIGTERM) time.Sleep(800 * time.Millisecond) _ = syscall.Kill(-pid, syscall.SIGKILL) _ = cmd.Process.Kill() }