lots more misc work

git-svn-id: svn://127.0.0.1/Perl/Proc-ProcessTable-Colorizer/trunk@962 0c1c3402-1be1-de11-8092-0022686faf23
This commit is contained in:
Zane C. B-H 2017-10-10 16:52:15 +00:00
parent 58a62ae2b0
commit 31314e37e8
1 changed files with 124 additions and 16 deletions

View File

@ -72,10 +72,9 @@ sub new {
'uid',
'pctcpu',
'pctmem',
'vmsize',
'size',
'rss',
'state',
'wchan',
'info',
'nice',
'start',
'time',
@ -120,12 +119,10 @@ sub colorize{
$field=$field.'CPU%';
}elsif( $fields->[$fieldInt] eq 'pctmem' ){
$field=$field.'Mem%';
}elsif( $fields->[$fieldInt] eq 'vmsize' ){
}elsif( $fields->[$fieldInt] eq 'size' ){
$field=$field.'VM Size';
}elsif( $fields->[$fieldInt] eq 'rss' ){
$field=$field.'RSS';
}elsif( $fields->[$fieldInt] eq 'wchan' ){
$field=$field.'WChan';
}elsif( $fields->[$fieldInt] eq 'proc' ){
$field=$field.'Command';
}else{
@ -175,18 +172,24 @@ sub colorize{
$values{pctmem}=($rss / $physmem)*100;
}elsif(
($^O =~ /bsd/) &&
( $field =~ /vmsize/ )
( $field =~ /size/ )
){
my $bproc=BSD::Process::info( $proc->pid );
$values{vmsize}=$bproc->{size};
$values{size}=$bproc->{size};
}elsif(
$field =~ /proc/
$field eq 'proc'
){
my $fname=$proc->fname;
my $cmndline=$proc->cmndline;
#save it for possible future use
$values{fname}=$fname;
$values{cmndline}=$cmndline;
#set the proc value
if ( $cmndline =~ /^$/ ){
#kernel proc
$values{'proc'}='['.$fname.']';
if ( $fname eq 'idle' ){
$values{'idle'}=1;
@ -194,7 +197,28 @@ sub colorize{
}else{
$values{'proc'}=$fname;
}
}elsif(
$field eq 'info'
){
$values{wchan}=$proc->wchan;
$values{state}=$proc->state;
if ($^O =~ /bsd/){
my $bproc=BSD::Process::info( $proc->pid );
$values{controlling_tty_active}=$bproc->{isctty};
$values{is_session_leader}=$bproc->{issleader};
$values{is_being_forked}=$bproc->{stat_1};
$values{working_on_exiting}=$bproc->{wexit};
$values{has_controlling_terminal}=$bproc->{controlt};
$values{is_locked}=$bproc->{locked};
$values{traced_by_debugger}=$bproc->{traced};
$values{is_stopped}=$bproc->{stat_4};
$values{posix_advisory_lock}=$bproc->{advlock};
use Data::Dumper;
print Dumper( $bproc );
}
}else{
$values{$field}=$proc->$field;
}
@ -210,8 +234,8 @@ sub colorize{
$values{pctcpu} = 0;
}
if ( ! defined( $values{vmsize} ) ){
$values{vmsize} = 0;
if ( ! defined( $values{size} ) ){
$values{size} = 0;
}
$values{pctcpu}=$values{pctcpu}/20;
@ -220,7 +244,7 @@ sub colorize{
$values{pctcpu}=sprintf('%.1f', $values{pctcpu});
$values{rss}=$values{rss}/1024;
$values{vmsize}=$values{vmsize}/1024;
$values{size}=$values{size}/1024;
push( @procs, \%values );
@ -229,10 +253,13 @@ sub colorize{
#sort by CPU percent and then RAM
@procs=sort {
$a->{pctcpu} <=> $b->{pctcpu} or
$a->{pctmem} <=> $b->{pctmem}
$a->{pctmem} <=> $b->{pctmem} or
$a->{rss} <=> $b->{rss} or
$a->{size} <=> $b->{size} or
$a->{time} <=> $b->{time}
} @procs;
@procs=reverse(@procs);
foreach my $proc (@procs){
my @line;
$self->nextColorReset;
@ -253,7 +280,10 @@ sub colorize{
){
foreach my $field ( @{$fields} ){
my $item=$proc->{$field};
my $item='';
if ( defined( $proc->{$field} ) ){
$item=$proc->{$field};
}
if ( $field eq 'start' ){
$item=$self->startString($item);
@ -271,6 +301,84 @@ sub colorize{
$item=$self->timeString($item);
}elsif( $field eq 'proc' ){
$item=color($self->processColorGet).$item;
}elsif( $field eq 'info'){
my $left=$proc->{state};
if (
$left eq 'sleep'
){
$left='S';
}elsif(
$left eq 'zombie'
){
$left='Z';
}elsif(
$left eq 'wait'
){
$left='W';
}elsif(
$left eq 'run'
){
$left='R';
}
#checks if it is swapped out
if (
( $proc->{state} ne 'zombie' ) &&
( $proc->{rss} == '0' )
){
$left=$left.'O';
}
#waiting to exit
if (
( defined( $proc->{working_on_exiting} ) ) &&
$proc->{working_on_exiting}
){
$left=$left.'E';
}
#session leader
if (
( defined( $proc->{is_session_leader} ) ) &&
$proc->{is_session_leader}
){
$left=$left.'s';
}
#checks to see if any sort of locks are present
if (
( defined( $proc->{is_locked} ) || defined( $proc->{posix_advisory_lock} ) )&&
( $proc->{is_locked} || $proc->{posix_advisory_lock} )
){
$left=$left.'L';
}
#checks to see if has a controlling terminal
if (
( defined( $proc->{has_controlling_terminal} ) ) &&
$proc->{has_controlling_terminal}
){
$left=$left.'+';
}
#if it is being forked
if (
( defined( $proc->{is_being_forked} ) ) &&
$proc->{is_being_forked}
){
$left=$left.'F';
}
#checks if it knows it is being traced
if (
( defined( $proc->{traced_by_debugger} ) ) &&
$proc->{traced_by_debugger}
){
$left=$left.'X';
}
$item=color($self->nextColor).$left.' '.color($self->nextColor).$proc->{wchan};
}else{
$item=color($self->nextColor).$item;
}