mhearse has asked for the wisdom of the Perl Monks concerning the following question:
#!/usr/bin/perl use strict; use Curses; while (1) { open PS_TREE, 'ps -eo pid,ppid,uid,rss,vsize,pcpu,pmem,time,stime, +cmd -ww --sort=pid | ' or die $!; my %ps_tree; while (my $line = <PS_TREE>) { chomp $line; my ( $pid, $ppid, $uid, $rss, $vsz, $cpu, $mem, $rtime, $stime, @cmd ) = split / +/, $line; $ps_tree{$pid} = { ppid => $ppid, uid => $uid, rss => $rss, vsz => $vsz, cpu => $cpu, mem => $mem, rtime => $rtime, stime => $stime, cmd => join ' ', @cmd }; } my @httpd_pids; for my $pid (keys %ps_tree) { if ($ps_tree{$pid}{cmd} =~ /httpd/) { push @httpd_pids, $pid; } } my @httpd_kids; for my $pid (keys %ps_tree) { if ($ps_tree{$pid}{cmd} !~ /httpd/ && grep { $_ == $ps_tree{$pid}{ppid} } @httpd_pids) { push @httpd_kids, $pid; } } my $line_cntr = 0; my $hdr = sprintf "%8s", 'PID'; $hdr .= sprintf "%8s", 'PPID'; $hdr .= sprintf "%8s", 'UID'; $hdr .= sprintf "%8s", 'RSS'; $hdr .= sprintf "%8s", 'VSZ'; $hdr .= sprintf "%8s", '%CPU'; $hdr .= sprintf "%8s", '%MEM'; $hdr .= sprintf "%10s", 'TIME'; $hdr .= sprintf "%10s", 'STIME'; $hdr .= sprintf "%14s\n", 'CMD'; initscr(); attron(A_STANDOUT); addstr($line_cntr++, 0, $hdr); attroff(A_STANDOUT); for my $kid (@httpd_kids) { my $line = sprintf "%8s", $kid; $line .= sprintf "%8s", $ps_tree{$kid}{ppid}; $line .= sprintf "%8s", $ps_tree{$kid}{uid}; $line .= sprintf "%8s", $ps_tree{$kid}{rss}; $line .= sprintf "%8s", $ps_tree{$kid}{vsz}; $line .= sprintf "%8s", $ps_tree{$kid}{cpu}; $line .= sprintf "%8s", $ps_tree{$kid}{mem}; $line .= sprintf "%10s", $ps_tree{$kid}{rtime}; $line .= sprintf "%10s", $ps_tree{$kid}{stime}; $line .= sprintf "%14s\n", $ps_tree{$kid}{cmd}; addstr($line_cntr++, 0, $line); } sleep 2; erase(); refresh(); move(0, 0); } __END__
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Top like display with Curses
by pc88mxer (Vicar) on May 21, 2008 at 18:03 UTC | |
by mhearse (Chaplain) on May 21, 2008 at 18:19 UTC |