8

Windowsのgolangで現在実行中のプロセスのリストを取得するにはどうすればよいですか?

私は次のようなものが必要です:

Golangで現在実行中のプロセスのリスト

しかし、Windowsでも使用できます。

4

5 に答える 5

8

必要な関数を実装しました(上記のaxwとしてのEnumProcess)。https://github.com/AllenDang/w32をチェックしてください。プルリクエストが完了するまで待つことをお勧めします:)使用方法の例:https ://gist.github.com/3083408

于 2012-07-10T14:03:36.250 に答える
5

Windows API 関数を使用する必要がありますEnumProcesses。Windowsのsyscallパッケージを使用すると、任意の DLL とその関数をロードできます (つまり、LoadLibrary/GetProcAddress を介して)。EnumProcessesに入ることができますpsapi.dll。これにより、PID のリストが表示されます。その後、OpenProcess と EnumProcessModules を使用してプロセス名を取得できます。

誰かがこれを実装する作業を既に行っている可能性がありますが、私は何も知りません。何も見つからない場合は、syscall パッケージのソース (たとえば、src/pkg/syscall/zsyscall_windows_386.go ) を調べて、他の Windows API 関数に対して行われたことと同様のことを行います。

于 2012-07-06T06:45:52.797 に答える
3

syscall パッケージのドキュメントによると、このパッケージはロックされています。標準の Go リポジトリ外のコードは、golang.org/x/sys リポジトリ内の対応するパッケージを使用するように移行する必要があります。

golang.org/x/sys/windows を使用できます。これには、システム プロセスを列挙するための Process32First と Process32Next があります。

于 2016-03-31T13:58:57.750 に答える
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

于 2021-05-24T20:27:24.937 に答える