#!/usr/bin/perl #use strict; my $process_id ; my @processes ; ################################################## # Was this program called with an arguement # Arguements can be a process id or program name ################################################## if ( (@ARGV == "1" ) && ( $ARGV[0]) =~ m/^\d+$/ ) { # # we received a process id. # chomp ( $process_id=$ARGV[0] ); print "Analyzing PID: $process_id\n"; } elsif ( (@ARGV == "1" ) && ( $ARGV[0] =~ m/^\w+$/ ) ) { print "received program name\n"; # # find process id # chomp $ARGV[0]; print "Checking for $ARGV[0]\n"; open( PROCESSES, "pidof $ARGV[0] |" ) || die "No proces found: $!\n"; @processes=split(" ",); # # Check if more than one process matches # if ( scalar (@processes) > 1 ) { print "Matches processes: @processes\n"; print "Which process is the one to watch?\t"; # # Check if they entered one process ID # if ( scalar ( split(" ",) ) > 1 ) { print scalar (); print "You aren't getting it.\n**ONE process can be watched**\nExiting\n"; exit; } else { chomp ( $process_id= ); print "Analyzing PID: $process_id\n"; } } else { chomp ( $process_id=$processes[0] ); print "Analyzing PID: $process_id\n"; } } else { print "usage: smaps_top.pl [PID|program]\n"; exit; } ################################################## # Check for process ################################################## if ( -e "/proc/$process_id" ) { print "Found: /proc/$process_id\n"; } else { print "Not Found: /proc/$process_id\n"; exit; } ################################################## # parse each entery # load into hash of hashs ################################################## # Example # %mem_location = { # "bfb52000-bfb55000 rw-p bfb52000 00:00 0" => { # Size => "12 kB", # Rss => "4 kB", # Shared_Clean => "0 kB", # Shared_Dirty => "0 kB", # Private_Clean => "0 kB", # Private_Dirty => "4 kB", # Referenced => "4 kB" # } # } # Dereference: # $mem_location->"bfb52000-bfb55000 rw-p bfb52000 00:00 0" -> Size; # my %mem_location={}; my $mem_address; open ( SMAPS, "cat /proc/$process_id/smaps |" )|| die; while (){ if ( /^([a-z]|\d)/ ... /^Referenced.*/){ if ( /^([a-z]|\d)?.*/) { chomp ($mem_address="$_"); print "$mem_address\n"; } elsif ( /^Size:/ ) { print "size\n"; } elsif ( /^Rss:/ ) { } elsif ( /^Shared_Clean:/ ) { } elsif ( /^Shared_Dirty:/ ) { } elsif ( /^Private_Clean:/ ) { } elsif ( /^Private_Dirty:/ ) { } elsif ( /^Referenced:/ ) { } } } close(SMAPS) || die;