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