mirror of
https://github.com/taigrr/wtf
synced 2025-01-18 04:03:14 -08:00
62 lines
1.1 KiB
Go
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
|
|
}
|