The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Раздел полезных советов: Реализация команды top на Shell"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Разговоры, обсуждение новостей (Public)
Изначальное сообщение [Проследить за развитием треда]

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

#!/bin/ksh
SLEEP=$1
FIELD=$2
[ -z "$1" ] && SLEEP=10
[ -z "$2" ] && FIELD=1
clear
lines=`tput lines`
lines=$((lines-5))
echo "\t\t`tput rev``hostname` TOP $lines PROCESESS at `date '+%H:%M:%S'` 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"
                ;;
        *)      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
        $PS_COMMAND | sort -r -n -k"$FIELD"  | head -$lines
        sleep $SLEEP
        tput ed
done


URL:
Обсуждается: http://www.opennet.ru/tips/info/1351.shtml

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Реализация команды top на Shell"  
Сообщение от rstone on 26-Дек-06, 15:16 
Еммм ...
В цикле while  tput ed надо перенести сразу за
tput cups 2 0 .
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Реализация команды top на Shell"  
Сообщение от anonymous_from_lor on 26-Дек-06, 17:51 
в солярке не канает:
ps: unknown output format: -o cputime
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Реализация команды top на Shell"  
Сообщение от rstone on 27-Дек-06, 11:37 
Ну теперь "канает" и на солярке .
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Реализация команды top на Shell"  
Сообщение от alex email(??) on 29-Дек-06, 01:33 
Rabotaet.
no tam est' predustanovlennyj 'prstat'
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Реализация команды top на Shell"  
Сообщение от rstone on 30-Дек-06, 13:45 
Да везде есть какое то подобие .
Но на Tru64  , например стандартный top падает и кроме всего
прочего он идет отдельно , не в базовом пакете .
Короче это не замена , это дополнение :)
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Реализация команды top на Shell"  
Сообщение от Аноним on 14-Янв-07, 11:04 
а uptime как на bash?
:-)
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Реализация команды top на Shell"  
Сообщение от Deepwlaker on 15-Янв-07, 06:09 
cat /proc/uptime, ну и далее по усмотрению.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Реализация команды top на Shell"  
Сообщение от rmf on 30-Янв-07, 14:13 
а зачем

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

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Реализация команды top на Shell"  
Сообщение от rmf on 30-Янв-07, 14:13 
поправка
$? -еq 0 ] || break
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "Реализация команды top на Shell"  
Сообщение от hand on 15-Ноя-07, 23:55 
пришлось убрать двойные скобки в 11 строке, под убунтером тож нормально заработало.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

11. "Реализация команды top на Shell"  
Сообщение от hand on 15-Ноя-07, 23:58 
правильно будет заменить {lines-5}
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

12. "Реализация команды top на Shell"  
Сообщение от rstone on 20-Ноя-07, 11:08 
Ну вот , ЭТО  моргает гораздо меньше :)


#!/bin/ksh

SLEEP=$1
FIELD=$2
[ -z "$1" ] && SLEEP=5
[ -z "$2" ] && FIELD=1
stty_save=`stty -g`
trap "stty $stty_save ; controlC ; exit; " EXIT
trap "eval `resize`;lines=`tput lines`; cols=`tput cols`;" WINCH
stty sane
clear
lines=`tput lines`
lines=$((lines-5))
date=`date '+%H:%M:%S'`
DATE=$date
REVERSE=`tput rev`
HOSTNAME=`hostname`
RESET=`tput sgr0`
UPTIME=`uptime | awk -F"," '{print $4 $5 $6 }' | awk -F":" '{print $2}'`
RHEAD="echo \t\t$REVERSE $HOSTNAME TOP $lines PROCESESS at $DATE every $SLEEP sec $UPTIME $RESET"
#echo $RHEAD
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 command="
                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=,command="
                HEADER_COMMAND="ps -f -p $$ -o pcpu,cputime,user,uid,pid,pmem,rssize,command"
                ;;
esac
tput cup 1 0
$HEADER_COMMAND | head -1
tput sgr0

collect () {
        if [ -x /home/tomko/bin/date.tom -a `uname` != Linux ];then
                DATE_COMMAND="/home/tomko/bin/date.tom +%s"
        else
                DATE_COMMAND="date +%S"
        fi
        from=`$DATE_COMMAND`
        rm -f /tmp/_col_.$$
        $PS_COMMAND |cut -c -`tput cols` |sort -r -n -k"$FIELD" |head -$lines  > /tmp/_col_.$$ &
        UPTIME=`uptime | awk -F"," '{print $4 $5 $6 }' | awk -F":" '{print $2}' &`
        wait
        to=`$DATE_COMMAND`
}

controlC ()  {
        rm -f /tmp/_col_.$$ 2>/dev/null
}

present () {
        # cup positon cursor on x x
        tput cup 0 0
        # el clear to end of line
        #tput el
        DATE=`date '+%H:%M:%S'`
        RHEAD="\t$REVERSE $HOSTNAME TOP $lines PROCESESS at $DATE every $SLEEP sec $UPTIME $RESET"
        echo $RHEAD
        tput cup 2 0
        # ed clear to end of screen
        tput ed
        [ -f /tmp/_col_.$$ ] && {
                cat /tmp/_col_.$$
                rm -f /tmp/_col_.$$
        }
}

OLDSLEEP=$SLEEP

while [ true ] ; do
        collect
        present
        diff=$(($to-$from))
        SLEEP=$(($SLEEP-$diff))
        [ $SLEEP -lt 0 ] && SLEEP=0
        sleep $SLEEP
        SLEEP=$OLDSLEEP
done

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]


  Закладки на сайте
  Проследить за страницей
Created 1996-2017 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
Hosting by Ihor