func tasksInsidePodCgroup()

in pkg/exporter/nettop/cgroup.go [32:75]


func tasksInsidePodCgroup(path string, absolutePath bool) []int {
	//TODO watch file changes by inotify
	if cgroupRoot == "" || path == "" {
		return nil
	}
	base := path
	if !absolutePath {
		base = filepath.Join(cgroupRoot, "memory", path)
	}
	m := make(map[int]int)
	err := filepath.Walk(base, func(path string, info fs.FileInfo, err error) error {
		if err != nil {
			return err
		}
		if !info.IsDir() && strings.HasSuffix(path, "/tasks") {
			tasks, err := os.ReadFile(path)
			if err != nil {
				return fmt.Errorf("failed read cgroup tasks %s: %w", path, err)
			}
			for _, s := range strings.Split(string(tasks), "\n") {
				s = strings.TrimSpace(s)
				if s == "" {
					continue
				}
				i, err := strconv.Atoi(s)
				if err != nil {
					return fmt.Errorf("invalid tasks pid format in %s : %w", path, err)
				}
				m[i] = 1
			}
		}
		return nil
	})

	if err != nil {
		log.Errorf("failed list tasks: %v", err)
	}

	var ret []int
	for k := range m {
		ret = append(ret, k)
	}
	return ret
}