better process memory reading error handling

This commit is contained in:
2025-03-16 20:49:26 +01:00
parent 9369f36c29
commit a933dee30f

View File

@@ -789,9 +789,15 @@ func getProcessMemory(pid int) (int, int, error) {
switch fields[0] { switch fields[0] {
case "VmRSS:": case "VmRSS:":
rss, _ = strconv.Atoi(fields[1]) rss, err = strconv.Atoi(fields[1])
if err != nil {
return 0, 0, err
}
case "VmSwap:": case "VmSwap:":
swap, _ = strconv.Atoi(fields[1]) swap, err = strconv.Atoi(fields[1])
if err != nil {
return 0, 0, err
}
} }
} }
return rss, swap, nil return rss, swap, nil
@@ -819,20 +825,23 @@ func getProcessTreeMemory(pgid int) (int, int, error) {
pid, err := strconv.Atoi(entry.Name()) pid, err := strconv.Atoi(entry.Name())
if err != nil { if err != nil {
return 0, 0, err continue
} }
statPath := fmt.Sprintf("/proc/%d/stat", pid) statPath := fmt.Sprintf("/proc/%d/stat", pid)
file, err := os.Open(statPath) file, err := os.Open(statPath)
if err != nil { if err != nil {
return 0, 0, err continue
} }
scanner := bufio.NewScanner(file) scanner := bufio.NewScanner(file)
if scanner.Scan() { if scanner.Scan() {
fields := strings.Fields(scanner.Text()) fields := strings.Fields(scanner.Text())
if len(fields) >= 5 { if len(fields) >= 5 {
processPGID, _ := strconv.Atoi(fields[4]) processPGID, err := strconv.Atoi(fields[4])
if err != nil {
return 0, 0, err
}
if processPGID == pgid { if processPGID == pgid {
rss, swap, err := getProcessMemory(pid) rss, swap, err := getProcessMemory(pid)
if err == nil { if err == nil {