Advertisement
s4ros

Stress.sh - CPU process monitor

Jan 30th, 2017
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.08 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. #top -b -n 1 | sed '1,7d'| sort | awk '{print $12 " | " $9}'
  4.  
  5. # $1,$2,$3,..,$n -- names of processes to monitor
  6.  
  7. OUTPUT=""
  8. FIRST_LAUNCH=1
  9.  
  10. # one process - $n
  11. #process_name=$1
  12. #shift
  13.  
  14. # generating output file
  15. make_output() {
  16.     cat /tmp/.stress/.header > ./stress.out
  17.     for proc in $(ls /tmp/.stress/); do
  18.         cat /tmp/.stress/$proc >> ./stress.out
  19.     done
  20.     sed -i "s/#/|/g" ./stress.out
  21.     echo "Output file written into ./stress.out"
  22. }
  23.  
  24. # cleaning after script
  25. clean_up() {
  26.     make_output
  27.     rm -rf /tmp/.stress
  28.     return
  29. }
  30.  
  31. # self explainable
  32. error_exit() {
  33.     echo -e "${PROGNAME}: ${1:-"Unknown Error"}" >&2
  34.     clean_up
  35.     exit 1
  36. }
  37.  
  38. # self explainable
  39. signal_exit() {
  40.     case $1 in
  41.         INT)    error_exit "Program interrupted by user" ;;
  42.         TERM)   echo -e "\n$PROGNAME: Program terminated" >&2 ; graceful_exit ;;
  43.         *)      error_exit "$PROGNAME: Terminating on unknown signal" ;;
  44.     esac
  45. }
  46.  
  47. # Trap signals
  48. trap "signal_exit TERM" TERM HUP
  49. trap "signal_exit INT"  INT
  50.  
  51.  
  52. # creating /tmp/.stress directory
  53. if [[ $FIRST_LAUNCH -eq 1 ]]; then
  54.     if [[ ! -d /tmp/.stress ]]; then
  55.         mkdir /tmp/.stress
  56.     fi
  57.     while [ $# -gt 0 ]; do
  58.         echo "$1 #" > /tmp/.stress/$1.$$
  59.         shift
  60.     done
  61.     echo "process_name #" > /tmp/.stress/.header
  62.     FIRST_LAUNCH=0
  63. fi
  64.  
  65. # rebuilding processes names
  66. processes=""
  67. for proc in $(ls /tmp/.stress/); do
  68. #    process=$(echo $proc | cut -d '.' -f 1)
  69.     processes="$processes $proc"
  70. done
  71.  
  72. #echo $processes
  73.  
  74. while [ 1 ]; do
  75.     clear
  76.     TIME_NOW=$(date "+%H:%M:%S")
  77.     sed -i "s/#/| $TIME_NOW #/" /tmp/.stress/.header
  78.     for proc in $processes; do
  79.         process_name=$(echo $proc | cut -d '.' -f 1)
  80.         process_cpu_usage=$(top -b -n 1 | sed '1,7d'| sort | grep $process_name | awk '{print $9}' | sort -r | head -n 1)
  81.         #echo "$process_name | $process_cpu_usage"
  82.         sed -i "s/#/| $process_cpu_usage #/" /tmp/.stress/$proc
  83.         cat /tmp/.stress/$proc
  84.     done
  85.     sleep 1
  86. done
  87. #ls -l /tmp/.stress/
  88.  
  89. clean_up
  90.  
  91. exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement