如何在Windows下的golang中获取当前正在运行的进程列表?
我需要类似的东西:
List of currently running process in Golang
但也可以在Windows下使用。
答案 0 :(得分:8)
我刚刚实现了你需要的功能(EnumProcess as axw如上所述)。 查看https://github.com/AllenDang/w32。您可能要等到我的拉取请求通过:) 有关如何使用的示例:https://gist.github.com/3083408
答案 1 :(得分:4)
您需要使用Windows API函数EnumProcesses
。 Windows上的syscall包允许您加载任意DLL及其功能(即通过LoadLibrary / GetProcAddress)。因此,您可以EnumProcesses
中的psapi.dll
。这给你一个PID列表;然后,您可以使用OpenProcess和EnumProcessModules来获取进程名称。
有人可能已经完成了这项工作,但我什么都不知道。如果找不到任何内容,请查看syscall包的源代码(例如src/pkg/syscall/zsyscall_windows_386.go),并执行类似于其他Windows API函数的操作。
答案 2 :(得分:2)
根据syscall包docs:此包被锁定。应迁移标准Go存储库之外的代码以使用golang.org/x/sys存储库中的相应包。
你可以使用golang.org/x/sys/windows,它有Process32First和Process32Next来枚举系统进程。
答案 3 :(得分:0)
这似乎做到了:
package main
import "golang.org/x/sys/windows"
// unsafe.Sizeof(windows.ProcessEntry32{})
const processEntrySize = 568
func main() {
h, e := windows.CreateToolhelp32Snapshot(windows.TH32CS_SNAPPROCESS, 0)
if e != nil {
panic(e)
}
p := windows.ProcessEntry32{Size: processEntrySize}
for {
e := windows.Process32Next(h, &p)
if e != nil { break }
s := windows.UTF16ToString(p.ExeFile[:])
println(s)
}
}
https://pkg.go.dev/golang.org/x/sys/windows#CreateToolhelp32Snapshot