(pid int32, mem *MemoryDetail)
| 226 | } |
| 227 | |
| 228 | func readStatus(pid int32, mem *MemoryDetail) error { |
| 229 | filePath := fmt.Sprintf("/proc/%d/status", pid) |
| 230 | file, err := os.Open(filePath) |
| 231 | if err != nil { |
| 232 | return err |
| 233 | } |
| 234 | defer file.Close() |
| 235 | |
| 236 | scanner := bufio.NewScanner(file) |
| 237 | |
| 238 | for scanner.Scan() { |
| 239 | line := scanner.Text() |
| 240 | fields := strings.Fields(line) |
| 241 | if len(fields) < 2 { |
| 242 | continue |
| 243 | } |
| 244 | |
| 245 | key := strings.TrimSuffix(fields[0], ":") |
| 246 | value, _ := strconv.ParseUint(fields[1], 10, 64) |
| 247 | value *= 1024 |
| 248 | |
| 249 | switch key { |
| 250 | case "VmRSS": |
| 251 | mem.RSS = value |
| 252 | case "VmSize": |
| 253 | mem.VMS = value |
| 254 | case "VmData": |
| 255 | mem.Data = value |
| 256 | case "VmSwap": |
| 257 | mem.Swap = value |
| 258 | case "VmExe": |
| 259 | mem.Text = value |
| 260 | case "RssShmem": |
| 261 | mem.Shared = value |
| 262 | case "VmHWM": |
| 263 | mem.HWM = value |
| 264 | case "VmStk": |
| 265 | mem.Stack = value |
| 266 | case "VmLck": |
| 267 | mem.Locked = value |
| 268 | } |
| 269 | } |
| 270 | |
| 271 | return scanner.Err() |
| 272 | } |
| 273 | |
| 274 | func readSmapsRollup(pid int32, mem *MemoryDetail) error { |
| 275 | filePath := fmt.Sprintf("/proc/%d/smaps_rollup", pid) |
no test coverage detected