Суббота, 01 Августа 2009 г. 15:52
+ в цитатник
Сделал по аналогии с
xps только на perl и под FreeBSD:
perl-скрипт:
#!/usr/bin/perl
#use strict;
#use warnings;
#use diagnostics;
my %pids = ();
my $width = int(qx(/usr/bin/tput cols))-1;
my @processes = split(/[\r\n]/,qx(/bin/ps axwwo pid,ppid,stat,command));
shift(@processes);
foreach (@processes)
{
my $pid = int(substr($_,0,5));
my $ppid = int(substr($_,6,5));
my $stat = substr($_,12,4);
my $command = substr($_,17);
$pids{$pid} = [$pid,$ppid,$stat,$command];
}
process(\%pids, 1, '', $width);
sub pr($$$)
{
my ($proc,$level,$width) = @_;
print "\033[1;32m$level\\_".$proc->[0]."\033[0;1;33m ".$proc->[2]."\033[0m ".$proc->[3]."\033[0m\n";
}
sub process
{
my ($pids, $pid, $level, $width) = @_;
pr($pids->{$pid},$level,$width);
my @parents = sort { $a <=> $b } grep (($pids->{$_}[0] && $pids->{$_}[1] == $pid), keys %{$pids});
foreach my $parent (@parents)
{
my $add = ($parent == $parents[-1]) ? ' ' : ' |';
process($pids, $pids->{$parent}[0], $level.$add, $width);
}
}
-
Запись понравилась
-
0
Процитировали
-
0
Сохранили
-