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.
|
|---|