#! /usr/bin/env python true = True = TRUE = 1 false = False = FALSE = 0 slice_interval = 1 # miliseconds short = true import sys, os, time, re def mytime(return_short = false): if return_short: hour,min,sec = time.localtime(time.time())[3:6] return `hour`+':'+`min`+':'+`sec` else: return time.asctime(time.localtime(time.time())) regexp = re.compile('^Vm(?=(Data|Size|Lib|Exe|Stk))') if len(sys.argv) < 2: print "Usage: %s nom_application [argument ...] " % sys.argv[0] sys.exit() app = sys.argv[1] pid = os.fork() if not pid: os.execvpe(app, sys.argv[1:], os.environ) else: time.sleep(slice_interval) #report = open(app+'.memstat', 'a') report = sys.stdout # write some header report.write("\n==================================================\n") report.write('Running ' + app + ' with PID ' + `pid` + ' at ' + mytime() +'\n\n') report.write('Time'.rjust(8)) report.write('VmSize '.rjust(12)) report.write('VmData '.rjust(12)) report.write('VmExe '.rjust(12)) report.write('VmLib '.rjust(12)) report.write('VmStk '.rjust(12)+'\n') app_running = true while app_running: # try to open the proc status, if app is still running try: f = open('/proc/'+`pid`+'/status','r') slice = f.readlines() f.close vm = {} for l in slice: if regexp.search(l): cuts = l.split() vm[cuts[0][:-1]] = cuts[1].strip() # write the report data now if vm == {}: raise(IOError) report.write(mytime(short).ljust(9)) report.write(vm['VmSize'].rjust(12)) report.write(vm['VmData'].rjust(12)) report.write(vm['VmExe'].rjust(12)) report.write(vm['VmLib'].rjust(12)) report.write(vm['VmStk'].rjust(12)+'\n') # now wait a bit time.sleep(slice_interval) except IOError: rep = 'App ' + app + ' with PID ' + `pid` + ' ended just before ' + mytime() print rep #report.write(rep+'\n') app_running = false