-Подписка по e-mail

 

 -Поиск по дневнику

Поиск сообщений в NeoliteBSD

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 25.07.2007
Записей: 39
Комментариев: 25
Написано: 106

Расширенный ps

Суббота, 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);
    }
}

Рубрики:  Tips&Tricks



 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку