If you want to do this all in Perl, rather than resorting to system calls, try Proc::ProcessTable - it should give you the state of a process, and lots of other rather useful bits of information you'd expect from UNIX commands like top and ps.
Here's a quick and dirty example to print the PID, state and commandline of all of the processes that are on CPU when the script runs (tested on Linux - IIRC on Solaris you should look for the phrase "On processor"):
#!/usr/bin/perl
use strict;
use warnings;
use Proc::ProcessTable;
my $t = new Proc::ProcessTable;
foreach my $proc (@{$t->table}) {
if ($proc->state =~ /run/oi) {
print join " ",
$proc->pid,
$proc->state,
$proc->cmndline,
"\n";
}
}
Cheers
BazB
Update: BTW, there are a number of methods that Proc::ProcessTable offers that will give you the amount of CPU time used by a process (and it's children if you want) and the like. Check the module's README.
|