#!/usr/bin/python import os, sys, time PAGESIZE=os.sysconf("SC_PAGE_SIZE")/1024 #KiB #stat = {Shared,Rss} #file = {smaps,statm} def getMemStat(pid,stat,file): if file=="smaps": shared_lines=[line for line in open("/proc/"+str(pid)+"/smaps").readlines() if line.find(stat)!=-1] return sum([int(line.split()[1]) for line in shared_lines]) else: if stat == "Shared": stat_index=2 elif stat == "Rss": stat_index=1 return int(open("/proc/"+str(pid)+"/statm").readline().split()[stat_index])*PAGESIZE a="\x00"*(32*1024*1024) #alloc 32MiB pid=os.fork() if(not pid): time.sleep(1) sys.exit() for file in ["statm", "smaps"]: rss=float(getMemStat(pid,"Rss",file)) shr=float(getMemStat(pid,"Shared",file)) print "/proc/%d/%s reports %.1f%% shared" % (pid,file,((shr/rss)*100)) os.wait()