Files
clash-meta/component/memory/memory_linux.go
2025-09-24 02:21:47 +08:00

38 lines
708 B
Go

package memory
import (
"os"
"path/filepath"
"strconv"
"strings"
)
var pageSize = uint64(os.Getpagesize())
func GetMemoryInfo(pid int32) (*MemoryInfoStat, error) {
proc := os.Getenv("HOST_PROC")
if proc == "" {
proc = "/proc"
}
memPath := filepath.Join(proc, strconv.Itoa(int(pid)), "statm")
contents, err := os.ReadFile(memPath)
if err != nil {
return nil, err
}
fields := strings.Split(string(contents), " ")
vms, err := strconv.ParseUint(fields[0], 10, 64)
if err != nil {
return nil, err
}
rss, err := strconv.ParseUint(fields[1], 10, 64)
if err != nil {
return nil, err
}
memInfo := &MemoryInfoStat{
RSS: rss * pageSize,
VMS: vms * pageSize,
}
return memInfo, nil
}