#!/bin/bash
#top -b -n 1 | sed '1,7d'| sort | awk '{print $12 " | " $9}'
# $1,$2,$3,..,$n -- names of processes to monitor
OUTPUT=""
FIRST_LAUNCH=1
# one process - $n
#process_name=$1
#shift
# generating output file
make_output() {
cat /tmp/.stress/.header > ./stress.out
for proc in $(ls /tmp/.stress/); do
cat /tmp/.stress/$proc >> ./stress.out
done
sed -i "s/#/|/g" ./stress.out
echo "Output file written into ./stress.out"
}
# cleaning after script
clean_up() {
make_output
rm -rf /tmp/.stress
return
}
# self explainable
error_exit() {
echo -e "${PROGNAME}: ${1:-"Unknown Error"}" >&2
clean_up
exit 1
}
# self explainable
signal_exit() {
case $1 in
INT) error_exit "Program interrupted by user" ;;
TERM) echo -e "\n$PROGNAME: Program terminated" >&2 ; graceful_exit ;;
*) error_exit "$PROGNAME: Terminating on unknown signal" ;;
esac
}
# Trap signals
trap "signal_exit TERM" TERM HUP
trap "signal_exit INT" INT
# creating /tmp/.stress directory
if [[ $FIRST_LAUNCH -eq 1 ]]; then
if [[ ! -d /tmp/.stress ]]; then
mkdir /tmp/.stress
fi
while [ $# -gt 0 ]; do
echo "$1 #" > /tmp/.stress/$1.$$
shift
done
echo "process_name #" > /tmp/.stress/.header
FIRST_LAUNCH=0
fi
# rebuilding processes names
processes=""
for proc in $(ls /tmp/.stress/); do
# process=$(echo $proc | cut -d '.' -f 1)
processes="$processes $proc"
done
#echo $processes
while [ 1 ]; do
clear
TIME_NOW=$(date "+%H:%M:%S")
sed -i "s/#/| $TIME_NOW #/" /tmp/.stress/.header
for proc in $processes; do
process_name=$(echo $proc | cut -d '.' -f 1)
process_cpu_usage=$(top -b -n 1 | sed '1,7d'| sort | grep $process_name | awk '{print $9}' | sort -r | head -n 1)
#echo "$process_name | $process_cpu_usage"
sed -i "s/#/| $process_cpu_usage #/" /tmp/.stress/$proc
cat /tmp/.stress/$proc
done
sleep 1
done
#ls -l /tmp/.stress/
clean_up
exit 0
Comments