Update README.md and vendor

This commit is contained in:
vcaesar 2017-11-25 18:50:35 +08:00
parent ac648bde74
commit ff1925b24d
4 changed files with 23 additions and 24 deletions

View File

@ -59,7 +59,7 @@ MinGW or other GCC
zlib & libpng (bitmap need it.) zlib & libpng (bitmap need it.)
``` ```
##### [Zlib & libpng Windows32 GCC's Course](https://github.com/go-vgo/Mingw32) ##### [Windows gcc installation Zlib & libpng tutorial](https://github.com/go-vgo/Mingw32)
##### [Download include zlib & libpng Windows64 GCC](https://github.com/go-vgo/Mingw) ##### [Download include zlib & libpng Windows64 GCC](https://github.com/go-vgo/Mingw)

View File

@ -57,7 +57,7 @@ MinGW or other GCC
zlib & libpng (bitmap 依赖) zlib & libpng (bitmap 依赖)
``` ```
##### [Zlib & libpng Windows32 GCC 教程](https://github.com/go-vgo/Mingw32) ##### [Windows GCC 安装 Zlib & libpng 教程](https://github.com/go-vgo/Mingw32)
##### [下载包含 zlib 和 libpng 的 64位 MinGW](https://github.com/go-vgo/Mingw) ##### [下载包含 zlib 和 libpng 的 64位 MinGW](https://github.com/go-vgo/Mingw)
#### For everything else (Linux 等其他系统): #### For everything else (Linux 等其他系统):

View File

@ -3,6 +3,7 @@
package process package process
import ( import (
"context"
"fmt" "fmt"
"strings" "strings"
"syscall" "syscall"
@ -94,7 +95,7 @@ func init() {
func Pids() ([]int32, error) { func Pids() ([]int32, error) {
// inspired by https://gist.github.com/henkman/3083408 // inspired by https://gist.github.com/henkman/3083408
// and https://github.com/giampaolo/psutil/blob/1c3a15f637521ba5c0031283da39c733fda53e4c/psutil/arch/windows/process_info.c#L315-L329 // and https://github.com/giampaolo/psutil/blob/1c3a15f637521ba5c0031283da39c733fda53e4c/psutil/arch/windows/process_info.c#L315-L329
var ret []int32 var ret []int32
var read uint32 = 0 var read uint32 = 0
var psSize uint32 = 1024 var psSize uint32 = 1024
@ -119,20 +120,21 @@ func Pids() ([]int32, error) {
} }
func (p *Process) Ppid() (int32, error) { func (p *Process) Ppid() (int32, error) {
dst, err := GetWin32Proc(p.Pid) ppid, _, _, err := getFromSnapProcess(p.Pid)
if err != nil { if err != nil {
return 0, err return 0, err
} }
return ppid, nil
return int32(dst[0].ParentProcessID), nil
} }
func GetWin32Proc(pid int32) ([]Win32_Process, error) { func GetWin32Proc(pid int32) ([]Win32_Process, error) {
var dst []Win32_Process var dst []Win32_Process
query := fmt.Sprintf("WHERE ProcessId = %d", pid) query := fmt.Sprintf("WHERE ProcessId = %d", pid)
q := wmi.CreateQuery(&dst, query) q := wmi.CreateQuery(&dst, query)
ctx, cancel := context.WithTimeout(context.Background(), common.Timeout)
if err := wmi.Query(q, &dst); err != nil { defer cancel()
err := common.WMIQueryWithContext(ctx, q, &dst)
if err != nil {
return []Win32_Process{}, fmt.Errorf("could not get win32Proc: %s", err) return []Win32_Process{}, fmt.Errorf("could not get win32Proc: %s", err)
} }
@ -144,11 +146,11 @@ func GetWin32Proc(pid int32) ([]Win32_Process, error) {
} }
func (p *Process) Name() (string, error) { func (p *Process) Name() (string, error) {
dst, err := GetWin32Proc(p.Pid) _, _, name, err := getFromSnapProcess(p.Pid)
if err != nil { if err != nil {
return "", fmt.Errorf("could not get Name: %s", err) return "", fmt.Errorf("could not get Name: %s", err)
} }
return dst[0].Name, nil return name, nil
} }
func (p *Process) Exe() (string, error) { func (p *Process) Exe() (string, error) {
@ -334,7 +336,9 @@ func (p *Process) MemoryInfoEx() (*MemoryInfoExStat, error) {
func (p *Process) Children() ([]*Process, error) { func (p *Process) Children() ([]*Process, error) {
var dst []Win32_Process var dst []Win32_Process
query := wmi.CreateQuery(&dst, fmt.Sprintf("Where ParentProcessId = %d", p.Pid)) query := wmi.CreateQuery(&dst, fmt.Sprintf("Where ParentProcessId = %d", p.Pid))
err := wmi.Query(query, &dst) ctx, cancel := context.WithTimeout(context.Background(), common.Timeout)
defer cancel()
err := common.WMIQueryWithContext(ctx, query, &dst)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -406,7 +410,7 @@ func (p *Process) Kill() error {
return common.ErrNotImplementedError return common.ErrNotImplementedError
} }
func (p *Process) getFromSnapProcess(pid int32) (int32, int32, string, error) { func getFromSnapProcess(pid int32) (int32, int32, string, error) {
snap := w32.CreateToolhelp32Snapshot(w32.TH32CS_SNAPPROCESS, uint32(pid)) snap := w32.CreateToolhelp32Snapshot(w32.TH32CS_SNAPPROCESS, uint32(pid))
if snap == 0 { if snap == 0 {
return 0, 0, "", windows.GetLastError() return 0, 0, "", windows.GetLastError()
@ -434,19 +438,14 @@ func (p *Process) getFromSnapProcess(pid int32) (int32, int32, string, error) {
// Get processes // Get processes
func Processes() ([]*Process, error) { func Processes() ([]*Process, error) {
var dst []Win32_Process pids, err := Pids()
q := wmi.CreateQuery(&dst, "")
err := wmi.Query(q, &dst)
if err != nil { if err != nil {
return []*Process{}, err return []*Process{}, fmt.Errorf("could not get Processes %s", err)
}
if len(dst) == 0 {
return []*Process{}, fmt.Errorf("could not get Process")
} }
results := []*Process{} results := []*Process{}
for _, proc := range dst { for _, pid := range pids {
p, err := NewProcess(int32(proc.ProcessID)) p, err := NewProcess(int32(pid))
if err != nil { if err != nil {
continue continue
} }

6
vendor/vendor.json vendored
View File

@ -75,10 +75,10 @@
"revisionTime": "2017-11-12T16:40:41Z" "revisionTime": "2017-11-12T16:40:41Z"
}, },
{ {
"checksumSHA1": "ahQMAy3zGepU4ero/dAi3Bputkk=", "checksumSHA1": "v3USS/LSyBuVc/DMBV+GX4ikZ5M=",
"path": "github.com/shirou/gopsutil/process", "path": "github.com/shirou/gopsutil/process",
"revision": "a8bc26299477e53c4ca89f7ec60160a74d4c0890", "revision": "bfe3c2e8f406bf352bc8df81f98c752224867349",
"revisionTime": "2017-11-12T16:40:41Z" "revisionTime": "2017-11-21T12:01:14Z"
}, },
{ {
"checksumSHA1": "Nve7SpDmjsv6+rhkXAkfg/UQx94=", "checksumSHA1": "Nve7SpDmjsv6+rhkXAkfg/UQx94=",