#!/usr/bin/perl -w use strict; use Proc::ProcessTable; my $t = new Proc::ProcessTable; print "PID PPID UP START CMD TYPE CMD NAME TRACE\n"; foreach my $p (@{$t->table}) { if ($p->{cmd} =~ /op01/) { ### Format time into a MM:SS format. ### accounts for single digits in seconds field ### pretty obvious, really. my $seconds = $p->{time} % 60; my $diff = ($p->{time} - $seconds) / 60; my $minutes = $diff % 60; $seconds = "0$seconds" if $seconds =~ /^\d$/; my $bigTime = "$minutes:$seconds"; ### Grab process name, type, and trace from cmd my $output = $p->{cmd}; my @array = split( /\s+-\w\s+/, $output); my $procType = $array[0]; my $procName = $array[1]; my $traceLevel; for (my $i = 2; $i < @array; $i++) { if ($array[$i] =~ /\dx(?:\d+)/) { $traceLevel = $array[$i]; last; } } $traceLevel = "N/A" if !defined($traceLevel); my $FORMAT = "%-6s %-6s %-7s %-24s %-15s %-19s %s\n"; printf($FORMAT, $p->{pid}, $p->{ppid}, $bigTime, scalar(localtime($p->{start})), $procType, $procName, $traceLevel); } }