tp1
This commit is contained in:
Executable
+53
@@ -0,0 +1,53 @@
|
||||
#!/usr/bin/env python3
|
||||
import sys
|
||||
import re
|
||||
|
||||
if len(sys.argv) < 2:
|
||||
print(f"Usage: {sys.argv[0]} <PID>")
|
||||
sys.exit(1)
|
||||
|
||||
pid = sys.argv[1]
|
||||
|
||||
try:
|
||||
with open(f"/proc/{pid}/smaps", "r") as f:
|
||||
lines = f.readlines()
|
||||
except FileNotFoundError:
|
||||
print(f"Erreur : le processus {pid} n'existe pas.")
|
||||
sys.exit(1)
|
||||
except PermissionError:
|
||||
print("Erreur : permissions insuffisantes (utilise sudo).")
|
||||
sys.exit(1)
|
||||
|
||||
# Entête identique à pmap -x
|
||||
print(f"{pid}: [analyse smaps complète]")
|
||||
print(f"{'Address':<16} {'Kbytes':>8} {'RSS':>8} {'Dirty':>8} {'Mode':<5} {'Mapping'}")
|
||||
print("-" * 65)
|
||||
|
||||
total_size = 0
|
||||
total_rss = 0
|
||||
total_dirty = 0
|
||||
|
||||
addr, mode, mapping = "", "", ""
|
||||
size, rss, dirty = 0, 0, 0
|
||||
|
||||
for line in lines:
|
||||
# Ligne d'entête de segment mémoire (ex: 7ffe12340000-7ffe12361000 rw-p ...)
|
||||
if re.match(r"^[0-9a-f]", line):
|
||||
parts = line.split(maxsplit=5)
|
||||
addr = parts[0].split("-")[0].zfill(16)
|
||||
mode = parts[1]
|
||||
mapping = parts[5].strip() if len(parts) > 5 else "[ anon ]"
|
||||
elif line.startswith("Size:"):
|
||||
size = int(line.split()[1])
|
||||
elif line.startswith("Rss:"):
|
||||
rss = int(line.split()[1])
|
||||
elif line.startswith("Private_Dirty:"):
|
||||
dirty = int(line.split()[1])
|
||||
# Fin de la lecture des métriques clés du segment -> Affichage
|
||||
print(f"{addr:<16} {size:>8} {rss:>8} {dirty:>8} {mode:<5} {mapping}")
|
||||
total_size += size
|
||||
total_rss += rss
|
||||
total_dirty += dirty
|
||||
|
||||
print("-" * 65)
|
||||
print(f"{'total kB':<16} {total_size:>8} {total_rss:>8} {total_dirty:>8}")
|
||||
Reference in New Issue
Block a user