in cgroup/util.go [230:263]
func ProcessCgroupPaths(rootfsMountpoint string, pid int) (map[string]string, error) {
if rootfsMountpoint == "" {
rootfsMountpoint = "/"
}
cgroup, err := os.Open(filepath.Join(rootfsMountpoint, "proc", strconv.Itoa(pid), "cgroup"))
if err != nil {
return nil, err
}
defer cgroup.Close()
paths := map[string]string{}
sc := bufio.NewScanner(cgroup)
for sc.Scan() {
// http://man7.org/linux/man-pages/man7/cgroups.7.html
// Format: hierarchy-ID:subsystem-list:cgroup-path
// Example:
// 2:cpu:/docker/b29faf21b7eff959f64b4192c34d5d67a707fe8561e9eaa608cb27693fba4242
line := sc.Text()
fields := strings.Split(line, ":")
if len(fields) != 3 {
continue
}
path := fields[2]
subsystems := strings.Split(fields[1], ",")
for _, subsystem := range subsystems {
paths[subsystem] = path
}
}
return paths, sc.Err()
}