I came across a situation where I needed to access the process table in Perl. The problem that i found was that the best accessor Proc::ProcessTable only retrieved an array. Since it seems fairly senseless to keep looping over an array to find the exact process id that I want, you may want to turn it into a hash.
use strict;
use warnings;
use Proc::ProcessTable;
# Create a new process table object
my ($pt) = new Proc::ProcessTable;
# Initialize your process table hash
my (%pt_hash);
# Get the fields that your architecture supports
my (@fields) = $pt->fields;
# Outer loop for each process id
foreach my $proc ( @{$pt->table} ) {
# Inner loop for each field within the process id
for my $field (@fields) {
# Add the field to the hash
$pt_hash{$proc->pid}{$field} = $proc->$field();
}
}
It’s just as simple as that. If you want to be sure that its in there. At the end of the file add these two lines for proof:
use Data::Dumper; print Dumper \%pt_hash;
The hash is organized with the keys being the process ids. There is another hash underneath it with all the fields as hash keys.
