s4ros icon

Stress.sh - CPU process monitor

s4ros | PRO | 01/30/17 02:40:05 PM UTC | 0 ⭐ | 440 👁️ | Never ⏰ | []
Bash |

2.08 KB

|

None

|

0 👍

/

0 👎

#!/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