From d28c254aaffef8d836402884f1b721285fef390f Mon Sep 17 00:00:00 2001 From: John Liu Date: Fri, 6 Oct 2017 12:23:54 -0400 Subject: [PATCH] Improve performance of finding child processes on Windows --- process/process_windows.go | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/process/process_windows.go b/process/process_windows.go index e02765e..97dd9b7 100644 --- a/process/process_windows.go +++ b/process/process_windows.go @@ -301,22 +301,22 @@ func (p *Process) MemoryInfoEx() (*MemoryInfoExStat, error) { } func (p *Process) Children() ([]*Process, error) { - procs, err := processes() + var dst []Win32_Process + query := wmi.CreateQuery(&dst, fmt.Sprintf("Where ParentProcessId = %d", p.Pid)) + err := wmi.Query(query, &dst) if err != nil { return nil, err } - out := []*Process{} - for _, proc := range procs { - parent, err := proc.Parent() + out := []*Process{} + for _, proc := range dst { + p, err := NewProcess(int32(proc.ProcessID)) if err != nil { continue } - - if parent.Pid == p.Pid { - out = append(out, proc) - } + out = append(out, p) } + return out, nil }