in reply to Piping top

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.