func ProcessMemory(proc *process.Process) (ms *MemoryStat, err error) { return StupidGetMemory(proc) // Not working in some machines if !isRootUser() { return StupidGetMemory(proc) } mapsStat, err := proc.MemoryMaps(true) // need root here if err != nil { return nil, err } ms = &MemoryStat{} for _, mstat := range *mapsStat { ms.VSS += (mstat.Size << 10) ms.RSS += (mstat.Rss << 10) ms.PSS += (mstat.Pss << 10) if mstat.Rss == mstat.Pss { ms.USS += (mstat.Rss << 10) } else { ms.USS += ((mstat.PrivateClean + mstat.PrivateDirty) << 10) } } return }