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.