PS com gráficos por processo
Publicado por Pedro Robson Leão (última atualização em 21/10/2009)
[ Hits: 6.162 ]
Executa monitoração de um determinado processo e gera um gráfico para análise. Utiliza gnuplot e imagemagick.
Boa alternativa para monitoração de um determinado processo.
#!/bin/bash # psChart # baseado em http://www.dicas-l.com.br/dicas-l/20091015.php # # by Pedro Robson Leao # # Dependencas: gnuplot, display, convert #:::::::::::::: #abc.csv #:::::::::::::: #5 30 #10 28.5 #20 3 #25 15 #30 17.5 #:::::::::::::: #abc.plot #:::::::::::::: #set terminal png size 400,300 #set output 'abc.png' #set grid y #set title 'TESTE' #set ylabel 'Y' #set xlabel 'X' #plot 'abc.csv' t'' with lines # Variaveis SVN SVN_REVISION='$Revision: 17854 $' SVN_LASTCHANGE='$Date: 2009-04-13 19:38:52 -0300 (Mon, 13 Apr 2009) $' VERSION="pscht v1.0.0 (19/10/2009)"; function usage() { printf "Use: ${PRG} <option,...> PID\n\n\t--help\n\t--time [seconds]\n\t--interval [seconds]\n\t--version\n\n"; printf "Default:\n\ttime = ${TIME}\n\tinterval = ${INTERVAL}\n" } function showVersion() { echo "Version: ${VERSION}"; echo "$SVN_REVISION" | awk '{printf("Svn Revision: %s\n", $2);}'; echo "$SVN_LASTCHANGE" | awk '{printf("Svn Date: %s %s %s\n", $2, $3, $4);}'; echo; } PRG=${0}; BASEPRG="$( basename ${PRG} .sh )"; TIME=60; #tempo default 60 segundos INTERVAL=5; #intervalo defalt 5 segundos #CMD="ps aux"; CMD="ps -e -o pid,pcpu,pmem,size,rsz,vsize,thcount,cmd"; #PLOT="%CPU %MEM VSZ"; PLOT="%CPU %MEM SZ RSZ VSZ THCNT"; [ -f ~/${BASEPRG}.rc ] && source ~/${BASEPRG}.rc; # Parametros longos set -- ${@//--help/-h}; set -- ${@//--time/-t}; set -- ${@//--interval/-i}; set -- ${@//--version/-v}; while getopts hvt:h: opc ; do case ${opc} in t) TIME="${OPTARG}";; i) INTERVAL="${OPTARG}";; h) usage && exit 0;; v) showVersion; exit 0;; *) usage && exit 1;; esac done _HEADER=( $( ${CMD} | head -1 ) ); shift $(($OPTIND - 1)) PID=${1}; [ -z "${PID}" ] && usage && exit 1; function find() { local key="${1}"; local i=0; local tot=${#_HEADER[@]}; for ((i=0;i<tot;i++)) { [ "${key}" == "${_HEADER[$i]}" ] && { echo $i; return } } echo 255; } function mkchart() { local pid="${1}"; local ppid="${2}"; local data=$$.${pid}.csv; local chart=$$.${pid}.png; local plot=$$.${pid}.plot; local date=$( date +'%d/%m/%Y %H:%M:%S' ) local key=; ### debug echo "${_HEADER[@]}"; for ((i=0;i<TIME;i+=INTERVAL)) { RES=( $( ${CMD} | grep -w ${pid} | egrep -wv "grep|${PRG}|tee" ) ); ### debug echo "${RES[@]}"; for key in ${PLOT} ; do local idx=$( find "${key}" ); [ "${idx}" != "255" ] && { #echo "$i ${key} ${RES[$idx]}"; echo "$i ${RES[$idx]}" >>/tmp/.${key}.${data}; } done sleep ${INTERVAL}; } for key in ${PLOT} ; do [ -f /tmp/.${key}.${data} ] && { cat >>/tmp/.${key}.${plot} <<EOF set terminal png size 400,300 set output '/tmp/.${key}.${chart}' set grid y set title '${key} ${date} $( date +'%d/%m/%Y %H:%M:%S' )' set ylabel '${key}' set xlabel 'Interval' plot '/tmp/.${key}.${data}' t'' with lines EOF gnuplot /tmp/.${key}.${plot} 2>/dev/null; } done convert -append /tmp/.*.${ppid}.*png ${BASEPRG}.${pid}.$( date +%Y%m%d-%H%M%S ).png; rm -f /tmp/.*.${ppid}.*; } mkchart ${PID} $$ | tee -a ${BASEPRG}.${PID}.$( date +%Y%m%d-%H%M%S ).log
Script simples para fazer backup em fita DAT
Monitoramento de usuário via screenshots
Compara igualdade entre arquivos
Script de busca (google em shell)
Front-end para administração do Samba
Instalar e Configurar o Slackware Linux em 2025
Como configurar os repositórios do apt no Debian 12 em 2025
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Como colorir os logs do terminal com ccze
Instalação Microsoft Edge no Linux Mint 22
Como configurar posicionamento e movimento de janelas no Lubuntu (Openbox) com atalhos de teclado
Máquinas Virtuais com IP estático acessando Internet no Virtualbox
Meus HDs não aparecem mais no boot da placa mãe (18)
Problema de Comunicação Entre Bridges após Configuração de Links no RB... (0)
Instalação de Drive - USB para HDMI Ubuntu (0)
Instalação do Ubuntu 22.04 LTS (6)
Linux Mint com GForce 630 e 2 monitores dos quais só um está na resolu... (6)