func getEnvData()

in metric/system/process/process_linux_common.go [284:311]


func getEnvData(hostfs resolve.Resolver, pid int, filter func(string) bool) (mapstr.M, error) {
	path := hostfs.Join("proc", strconv.Itoa(pid), "environ")
	data, err := os.ReadFile(path)
	if errors.Is(err, os.ErrPermission) { // pass through permission errors
		return nil, err
	} else if err != nil {
		return nil, fmt.Errorf("error opening file %s: %w", path, err)
	}
	env := mapstr.M{}

	pairs := bytes.Split(data, []byte{0})
	for _, kv := range pairs {
		parts := bytes.SplitN(kv, []byte{'='}, 2)
		if len(parts) != 2 {
			continue
		}

		key := string(bytes.TrimSpace(parts[0]))
		if key == "" {
			continue
		}

		if filter == nil || filter(key) {
			env[key] = string(bytes.TrimSpace(parts[1]))
		}
	}
	return env, nil
}