golang,Windows版本中当前正在运行的进程列表

时间:2012-07-06 05:23:13

标签: go

如何在Windows下的golang中获取当前正在运行的进程列表?

我需要类似的东西:

List of currently running process in Golang

但也可以在Windows下使用。

4 个答案:

答案 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