diff --git a/process/process_darwin.go b/process/process_darwin.go index aa17d1d..1e18f1d 100644 --- a/process/process_darwin.go +++ b/process/process_darwin.go @@ -390,8 +390,8 @@ func (p *Process) MemoryMaps(grouped bool) (*[]MemoryMapsStat, error) { return &ret, common.ErrNotImplementedError } -func processes() ([]Process, error) { - results := make([]Process, 0, 50) +func Processes() ([]*Process, error) { + results := make([]*Process) mib := []int32{CTLKern, KernProc, KernProcAll, 0} buf, length, err := common.CallSyscall(mib) @@ -403,13 +403,6 @@ func processes() ([]Process, error) { k := KinfoProc{} procinfoLen := int(unsafe.Sizeof(k)) count := int(length / uint64(procinfoLen)) - /* - fmt.Println(length, procinfoLen, count) - b := buf[0*procinfoLen : 0*procinfoLen+procinfoLen] - fmt.Println(b) - kk, err := parseKinfoProc(b) - fmt.Printf("%#v", kk) - */ // parse buf to procs for i := 0; i < count; i++ { @@ -422,7 +415,7 @@ func processes() ([]Process, error) { if err != nil { continue } - results = append(results, *p) + results = append(results, p) } return results, nil diff --git a/process/process_freebsd.go b/process/process_freebsd.go index aa3e85c..c8cb1b9 100644 --- a/process/process_freebsd.go +++ b/process/process_freebsd.go @@ -22,7 +22,7 @@ type MemoryMapsStat struct { func Pids() ([]int32, error) { var ret []int32 - procs, err := processes() + procs, err := Processes() if err != nil { return ret, nil } @@ -278,8 +278,8 @@ func (p *Process) MemoryMaps(grouped bool) (*[]MemoryMapsStat, error) { return &ret, common.ErrNotImplementedError } -func processes() ([]Process, error) { - results := make([]Process, 0, 50) +func Processes() ([]*Process, error) { + results := make([]*Process) mib := []int32{CTLKern, KernProc, KernProcProc, 0} buf, length, err := common.CallSyscall(mib) @@ -302,7 +302,7 @@ func processes() ([]Process, error) { continue } - results = append(results, *p) + results = append(results, p) } return results, nil diff --git a/process/process_linux.go b/process/process_linux.go index 1839eb2..9db1997 100644 --- a/process/process_linux.go +++ b/process/process_linux.go @@ -1017,6 +1017,27 @@ func Pids() ([]int32, error) { return readPidsFromDir(common.HostProc()) } +// Process returns a slice of pointers to Process structs for all +// currently running processes. +func Processes() ([]*Process, error) { + out := []*Process{} + + pids, err := Pids() + if err != nil { + return out, err + } + + for _, pid := range pids { + p, err := NewProcess(pid) + if err != nil { + continue + } + out = append(out, p) + } + + return out, nil +} + func readPidsFromDir(path string) ([]int32, error) { var ret []int32 diff --git a/process/process_openbsd.go b/process/process_openbsd.go index fb553a6..6bff0b3 100644 --- a/process/process_openbsd.go +++ b/process/process_openbsd.go @@ -25,7 +25,7 @@ type MemoryMapsStat struct { func Pids() ([]int32, error) { var ret []int32 - procs, err := processes() + procs, err := Processes() if err != nil { return ret, nil } @@ -268,8 +268,8 @@ func (p *Process) MemoryMaps(grouped bool) (*[]MemoryMapsStat, error) { return &ret, common.ErrNotImplementedError } -func processes() ([]Process, error) { - results := make([]Process, 0, 50) +func Processes() ([]*Process, error) { + results := make([]*Process) buf, length, err := CallKernProcSyscall(KernProcAll, 0) @@ -292,7 +292,7 @@ func processes() ([]Process, error) { continue } - results = append(results, *p) + results = append(results, p) } return results, nil diff --git a/process/process_windows.go b/process/process_windows.go index c1cf4cb..02478a3 100644 --- a/process/process_windows.go +++ b/process/process_windows.go @@ -95,7 +95,7 @@ func init() { func Pids() ([]int32, error) { var ret []int32 - procs, err := processes() + procs, err := Processes() if err != nil { return ret, nil } @@ -292,11 +292,11 @@ func (p *Process) Times() (*cpu.TimesStat, error) { // below from psutil's _psutil_windows.c, and in turn from Python's // Modules/posixmodule.c - user := float64(sysTimes.UserTime.HighDateTime) * 429.4967296 + float64(sysTimes.UserTime.LowDateTime) * 1e-7 - kernel := float64(sysTimes.KernelTime.HighDateTime) * 429.4967296 + float64(sysTimes.KernelTime.LowDateTime) * 1e-7 + user := float64(sysTimes.UserTime.HighDateTime)*429.4967296 + float64(sysTimes.UserTime.LowDateTime)*1e-7 + kernel := float64(sysTimes.KernelTime.HighDateTime)*429.4967296 + float64(sysTimes.KernelTime.LowDateTime)*1e-7 return &cpu.TimesStat{ - User: user, + User: user, System: kernel, }, nil } @@ -422,7 +422,7 @@ func (p *Process) getFromSnapProcess(pid int32) (int32, int32, string, error) { } // Get processes -func processes() ([]*Process, error) { +func Processes() ([]*Process, error) { var dst []Win32_Process q := wmi.CreateQuery(&dst, "") err := wmi.Query(q, &dst) @@ -508,9 +508,9 @@ func getProcessMemoryInfo(h windows.Handle, mem *PROCESS_MEMORY_COUNTERS) (err e type SYSTEM_TIMES struct { CreateTime syscall.Filetime - ExitTime syscall.Filetime + ExitTime syscall.Filetime KernelTime syscall.Filetime - UserTime syscall.Filetime + UserTime syscall.Filetime } func getProcessCPUTimes(pid int32) (SYSTEM_TIMES, error) {