in providers/linux/process_linux.go [237:269]
func (p *process) User() (types.UserInfo, error) {
content, err := os.ReadFile(p.path("status"))
if err != nil {
return types.UserInfo{}, err
}
var user types.UserInfo
err = parseKeyValue(content, ':', func(key, value []byte) error {
// See proc(5) for the format of /proc/[pid]/status
switch string(key) {
case "Uid":
ids := strings.Split(string(value), "\t")
if len(ids) >= 3 {
user.UID = ids[0]
user.EUID = ids[1]
user.SUID = ids[2]
}
case "Gid":
ids := strings.Split(string(value), "\t")
if len(ids) >= 3 {
user.GID = ids[0]
user.EGID = ids[1]
user.SGID = ids[2]
}
}
return nil
})
if err != nil {
return user, fmt.Errorf("error partsing key-values in user data: %w", err)
}
return user, nil
}