diff --git a/sample_proc.py b/sample_proc.py index 548edc3c5596335124b27904d65da7b4fa7624bf..a536f12ce758a8712c899b5fd4a1e32cb61264ff 100755 --- a/sample_proc.py +++ b/sample_proc.py @@ -11,7 +11,7 @@ from pathlib import Path import sys import time import subprocess -from typing import List, Optional +from typing import List, Optional, Iterator def read_proc(pid: int) -> dict: f = Path('/proc') / str(pid) / 'status' @@ -46,6 +46,30 @@ def plot_it(results: "numpy.ndarray", else: pl.show() +def parse_smaps(s: str) -> Iterator[dict]: + cur = {} + for l in s.split('\n'): + parts = l.split() + if len(parts) == 0: + yield cur # end of file + if parts[0].endswith(':'): + cur[parts[0][:-1]] = ' '.join(parts[1:]) + else: + if cur != {}: + yield cur + + start_s, end_s = parts[0].split('-') + perms = parts[1] + cur = { + 'start': int(start_s, 16), + 'end': int(end_s, 16), + 'perms': parts[1], + 'offset': int(parts[2], 16), + 'dev': parts[3], + 'inode': int(parts[4], 16), + 'pathname': parts[5] if len(parts) >= 6 else '', + } + def main(): import argparse parser = argparse.ArgumentParser()