The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Реализация команды top на Shell
Должно работать на любом терминале поддерживающем VT Escape 
последовательности, проверено в Linux, True64 ,  HP-UX  и Соларисе .

#!/bin/ksh
SLEEP=$1
FIELD=$2
[ -z "$1" ] && SLEEP=10 
[ -z "$2" ] && FIELD=1
stty_save=`stty -g`
trap "stty $stty_save ; exit; " 2 
stty sane
clear
lines=`tput lines`
lines=$((lines-5))
DATE=`date '+%H:%M:%S'`
echo "\t\t`tput rev``hostname` TOP $lines PROCESESS at $DATE every $SLEEP seconds`tput sgr0`"
tput bold
case `uname` in
        Linux)  PS_COMMAND="ps -e -o pcpu= -o cputime= -o user= -o uid= -o pid= -o pmem= -o rssize= -o comm="
                HEADER_COMMAND="ps f  -p $$ -o pcpu,cputime,user,uid,pid,pmem,rssize,command"
                ;;
        HP-UX)  UNIX95=1
                export UNIX95
                PS_COMMAND="ps -e -o pcpu= -o time= -o user= -o uid= -o pid= -o vsz= -o sz= -o comm="
                HEADER_COMMAND="ps -p $$ -o pcpu,time,user,uid,pid,vsz,sz,comm"
                ;;
        SunOS)  HEADER_COMMAND="ps -f -p $$ -o pcpu,time,user,uid,pid,pmem,rss,comm"
                PS_COMMAND="ps -e -o pcpu= -o time= -o user= -o uid= -o pid= -o pmem= -o rss= -o comm="
                ;;

        *)      PS_COMMAND="ps -ef -o pcpu=,cputime=,user=,uid=,pid=,pmem=,rssize=,comm="
                HEADER_COMMAND="ps -f -p $$ -o pcpu,cputime,user,uid,pid,pmem,rssize,command"
                ;;
esac
$HEADER_COMMAND | head -1
tput sgr0
while [ true ] ; do 
        tput cup 2 0
        tput ed
        $PS_COMMAND | sort -r -n -k"$FIELD"  | head -$lines 
        sleep $SLEEP
done
 
26.12.2006 , Автор: rstone
Ключи: shell, top, monitor / Лицензия: CC-BY
Раздел:    Корень / Программисту и web-разработчику / Shell / Готовые скрипты

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, rstone (?), 15:16, 26/12/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Еммм ...
    В цикле while  tput ed надо перенести сразу за
    tput cups 2 0 .
     
  • 1.2, anonymous_from_lor (?), 17:51, 26/12/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    в солярке не канает:
    ps: unknown output format: -o cputime
     
  • 1.3, rstone (?), 11:37, 27/12/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ну теперь "канает" и на солярке .
     
     
  • 2.4, alex (??), 01:33, 29/12/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Rabotaet.
    no tam est' predustanovlennyj 'prstat'
     

  • 1.5, rstone (?), 13:45, 30/12/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Да везде есть какое то подобие .
    Но на Tru64  , например стандартный top падает и кроме всего
    прочего он идет отдельно , не в базовом пакете .
    Короче это не замена , это дополнение :)
     
  • 1.6, Аноним (-), 11:04, 14/01/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а uptime как на bash?
    :-)
     
  • 1.7, Deepwlaker (?), 06:09, 15/01/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    cat /proc/uptime, ну и далее по усмотрению.
     
  • 1.8, rmf (?), 14:13, 30/01/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а зачем

    чем эта реализация отличается от

    while : ; do
      clear
      top -b -n 1 -d <delay>
      [ $? -еq 0 ] && break
    done

    top -b использует dumb терминал

     
  • 1.9, rmf (?), 14:13, 30/01/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    поправка
    $? -еq 0 ] || break
     
  • 1.10, hand (?), 23:55, 15/11/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    пришлось убрать двойные скобки в 11 строке, под убунтером тож нормально заработало.
     
     
  • 2.11, hand (?), 23:58, 15/11/2007 [^] [^^] [^^^] [ответить]  
  • +/
    правильно будет заменить {lines-5}
     

  • 1.12, rstone (?), 11:08, 20/11/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ну вот , ЭТО моргает гораздо меньше bin ksh SLEEP 1 FIELD 2 -z 1 ... большой текст свёрнут, показать
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру