You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Go中调用windows.SetPriorityClass设置子进程优先级

无需使用unsafe的解决方案

不需要借助unsafe来访问未导出字段,你可以通过进程ID(Pid)合法获取进程句柄,进而设置优先级,具体实现如下:

修改后的代码

package main

import (
    "fmt"
    "log"
    "os/exec"

    "golang.org/x/sys/windows"
)

func main() {
    fmt.Println("Hello World")

    // 启动hello.py脚本
    cmd := exec.Command("python", "hello.py")
    err := cmd.Start()
    if err != nil {
        log.Fatal(err)
    }
    defer cmd.Wait()

    // 通过Pid打开进程,获取具备设置权限的句柄
    processHandle, err := windows.OpenProcess(windows.PROCESS_SET_INFORMATION, false, uint32(cmd.Process.Pid))
    if err != nil {
        log.Fatalf("Failed to open process: %v", err)
    }
    defer windows.CloseHandle(processHandle)

    // 设置进程优先级为Above Normal
    err = windows.SetPriorityClass(processHandle, windows.ABOVE_NORMAL_PRIORITY_CLASS)
    if err != nil {
        log.Fatalf("Failed to set priority class: %v", err)
    }

    fmt.Println("Process priority set to above normal")
}

关键说明

  • 调用windows.OpenProcess时,必须传入PROCESS_SET_INFORMATION权限标识,这是修改进程优先级类的必要权限
  • 获取到的进程句柄必须手动关闭,用defer windows.CloseHandle(processHandle)可以确保程序退出前释放资源
  • 该方案完全遵循Go的访问控制规则,不依赖未导出字段,兼容性和稳定性更好

内容的提问来源于stack exchange,提问作者Gillespie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 19:02:41