• Авторизация


Расширенный ps 01-08-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);
    }
}

вверх^ к полной версии понравилось! в evernote


Вы сейчас не можете прокомментировать это сообщение.

Дневник Расширенный ps | NeoliteBSD - Дневник администратора FreeBSD сервера | Лента друзей NeoliteBSD / Полная версия Добавить в друзья Страницы: раньше»