Monitor de Recursos
Mediante top o ps que se vaya graficando el uso de recursos por parte de algún proceso en específico mediante variaciones con caracterés.
Desarrollar una herramienta que monitoree la información de una o varias aplicaciones en ejecución y las muestre de manera gráfica (mediante puntos, asteriscos, o el caracter de su preferencia).
El script deberá permitir especificar las aplicaciones a monitorear mediante nombre de aplicación, usuario o PID (Process ID), así como permitir indicar múltiples aplicaciones, una sola o en caso de no indicarse monitorear todas ellas.
Así mismo, se debe contar con la capacidad de indicar que parámetro se espera mostrar: CPU, memoria, tiempo, estado del proceso.
Ola a todos tengo unas dudas con este problema... espero puedan ayudarme. Especialmente en la parte de mostrar la informacion individual de una aplicacion y su informacion grafica
este es el script que asta el momento llevo hecho... simplemente pasa los resultados mostrados por el comando
top y los pasa a un .txt para poder busccar una aplicacion en especifico.
#!/bin/bash
echo "Ingrese el nombre de la aplicacion *Solo se repetira la accion 5 Veces*"
read nombre
echo "Espere..."
top -b -n 5 > top.txt
grep $nombre top.txt > nombre1.txt
cat nombre1.txt | cut -c 42-43 > nombre11.txt
numero=`head -n 1 nombre11.txt`
LIMITE=$numero
echo "El Numero es $numero "
#LIMITE=10
for ((a=1; a<= LIMITE ; a++)) # Doble paréntesis y "LIMITE" sin "$".
do
echo -n "*" # -n = no añade salto de linea
done
echo
numero1=`tail -n 1 numero11.txt`
LIMITE1=$numero1
echo "El Numero es $numero "
for ((a1=1; a1<= LIMITE1 ; a1++)) # Doble paréntesis y "LIMITE" sin "$".
do
echo -n "*" # -n = no añade salto de linea
done
echo
Espero puedan ayudarme. GRACIAS¡
Sonaba entretenido y dado que no es mi tarea me tome la libertad de hacerlo como se me ocurrió...y hasta acá llego :D
Quizás algún día descubra un buen gráfico para la medición.
#!/bin/sh
PROCESS_LIST_FILE=`mktemp`
PARSED_PROCESS_LIST_FILE=`mktemp`
GRAPH_SIZE=10
trap control_c SIGINT
control_c(){
rm -vf $PROCESS_LIST_FILE
rm -vf $PARSED_PROCESS_LIST_FILE
echo 'Bye!'
exit 5
}
f_watch_watcher(){
while [[ -d /proc/$optionB ]]; do
CURRENT_VALUE=`ps h -p $optionB -o $PS_STRING`
let "CURRENT_VALUE %= $GRAPH_SIZE"
CURRENT_VALUE=$((CURRENT_VALUE + 2))
clear
seq -s "+" $CURRENT_VALUE | sed 's/[0-9]//g'
sleep 1
clear
done
exit 4
}
f_get_watch(){
select optionC in "CPU" "Memory" "CPU Time" "State"; do
case "$optionC" in
"CPU")PS_STRING='c';f_watch_watcher;;
*)echo -e '501 Not implemented\nGo away! '$optionC; exit 3;;
esac
done
}
f_show_parsed(){
select optionB in `cat $PARSED_PROCESS_LIST_FILE` "Done"; do
case "$optionB" in
"Done")exit;;
*) f_get_watch; exit 2 ;;
esac
done
}
f_select_pid(){
cat $PROCESS_LIST_FILE | cut -f1 -d' ' | tr ' ' '-' > $PARSED_PROCESS_LIST_FILE
f_show_parsed
}
ps fh -o pid,user,comm \
-N --ppid 2 -p 1,2 \
| awk '$3 !~ /^[|\\]/ { print $1" "$2" "$3 }' > $PROCESS_LIST_FILE
select optionA in "PID - Process ID" "USER - User name" "COMM - Command"; do
case "$optionA" in
"PID - Process ID")f_select_pid;;
*)echo -e '501 Not implemented\nGo away! '$optionA; exit 1;;
esac
done
control_c
Update: ahora acepta varios PID's y tiene un poco mas de color...espero no tener que volver a hacer esto...
#!/bin/sh
PROCESS_LIST_FILE=`mktemp`
PARSED_PROCESS_LIST_FILE=`mktemp`
GRAPH_SIZE=10
DOTS='****************************************************************************************************'
trap control_c SIGINT
control_c(){
rm -f $PROCESS_LIST_FILE
rm -f $PARSED_PROCESS_LIST_FILE
echo 'Bye!'
stty echo
tput cvvis
exit 5
}
f_watch_watcher(){
tput clear
tput civis
stty -echo
while :; do
i=0
for pid in $PID_LIST; do
if [[ -d /proc/$pid ]]; then
tput cup $i 0
CURRENT_VALUE=`ps h -p $pid -o $PS_STRING`
echo -n "$DOTS" "$CURRENT_VALUE"
tput cup $i 0
((CURRENT_VALUE++))
case $CURRENT_VALUE in
[0-9]|[1-2][0-9]|3[1-3])color='\e[0;32m';;
3[4-9]|[4-5][0-9]|6[0-6])color='\e[0;33m';;
6[7-9]|[7-9][0-9]|100)color='\e[0;31m';;
esac
echo -ne $color
NOTDOT=`seq -s "+" $CURRENT_VALUE | sed 's/[0-9]//g'`
echo -en $NOTDOT'\e[0m'
else
tput cup $i 0
echo -n 'PID dead: '$pid
fi
((i++))
done
done
exit 4
}
f_what_watch(){
select optionC in "CPU" "Memory" "CPU Time" "State"; do
case "$optionC" in
"CPU")
PS_STRING='c'
break
;;
*)
echo -e '501 Not implemented\nGo away!'
exit 5
;;
esac
done
}
f_get_pidlist(){
# TODO: Add warning if PID was selected before OR
# Remove PID from list
select optionB in `cat $PARSED_PROCESS_LIST_FILE` "Done"; do
case $optionB in
"Done")
# Catch empty PID_LIST
[[ x"$PID_LIST" == 'x' ]] && echo 'You did not select any PID...' && control_c
break # Exits select loop
;;
*)
# Catch first PID
if [[ x"$PID_LIST" == 'x' ]]; then
PID_LIST=$optionB
else
PID_LIST="$PID_LIST"' '"$optionB"
fi
;;
esac
done
}
f_select_pid(){
cat $PROCESS_LIST_FILE | cut -f1 -d' ' | tr ' ' '-' > $PARSED_PROCESS_LIST_FILE
}
f_select_filter(){
select optionA in "PID - Process ID" "USER - User name" "COMM - Command"; do
case $optionA in
"PID - Process ID")
f_select_pid # Return $PARSED_PROCESS_LIST_FILE
break # This is for the select loop
;;
"USER - User name"|"COMM - Command")
echo -e '501 Not implemented\nGo away! '$optionA
exit 3
;;
*)
echo 'Error!'
exit 3
;;
esac
done
}
f_get_psfile(){
ps h -o pid,user,comm \
-N --ppid 2 -p 1,2 \
| column -t | tr -s ' ' | cut -f1,2,3 -d ' '> $PROCESS_LIST_FILE
}
f_get_psfile # Return $PROCESS_LIST_FILE
f_select_filter # Return $PARSED_PROCESS_LIST_FILE
f_get_pidlist # Return $PID_LIST
f_what_watch # Return $PS_STRING
f_watch_watcher # Shows nice graphs
control_c