1
0
mirror of https://github.com/taigrr/wtf synced 2025-01-18 04:03:14 -08:00
2018-11-12 01:30:24 -08:00

62 lines
1.1 KiB
Go

package linux
import (
"io/ioutil"
"strconv"
"strings"
)
// Provides information about memory usage, measured in pages.
type ProcessStatm struct {
Size uint64 `json:"size"` // total program size
Resident uint64 `json:"resident"` // resident set size
Share uint64 `json:"share"` // shared pages
Text uint64 `json:"text"` // text (code)
Lib uint64 `json:"lib"` // library (unused in Linux 2.6)
Data uint64 `json:"data"` // data + stack
Dirty uint64 `json:"dirty"` // dirty pages (unused in Linux 2.6)
}
func ReadProcessStatm(path string) (*ProcessStatm, error) {
b, err := ioutil.ReadFile(path)
if err != nil {
return nil, err
}
s := string(b)
f := strings.Fields(s)
statm := ProcessStatm{}
var n uint64
for i := 0; i < len(f); i++ {
if n, err = strconv.ParseUint(f[i], 10, 64); err != nil {
return nil, err
}
switch i {
case 0:
statm.Size = n
case 1:
statm.Resident = n
case 2:
statm.Share = n
case 3:
statm.Text = n
case 4:
statm.Lib = n
case 5:
statm.Data = n
case 6:
statm.Dirty = n
}
}
return &statm, nil
}