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.
In reply to Re: Piping top
by BazB
in thread Piping top
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |