This implementation should be more efficient because it only uses the names under /proc, whereas the previous implementation fetched the full directory entry for each one, and sorted them too.
28 lines
508 B
Go
28 lines
508 B
Go
package common
|
|
|
|
import (
|
|
"os"
|
|
"strconv"
|
|
)
|
|
|
|
func AllPids(procRoot string) ([]int, error) {
|
|
fh, err := os.Open(procRoot)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer fh.Close()
|
|
dirNames, err := fh.Readdirnames(-1)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
pids := make([]int, len(dirNames))
|
|
for _, dirName := range dirNames {
|
|
pid, err := strconv.Atoi(dirName)
|
|
if err != nil { // Only interested in numeric entries - skip /proc/stat, etc.
|
|
continue
|
|
}
|
|
pids = append(pids, pid)
|
|
}
|
|
return pids, err
|
|
}
|