Shell常用脚本:找出使用 CPU | memory 前十的进程

x33g5p2x  于2022-02-18 转载在 Shell  
字(0.9k)|赞(0)|评价(0)|浏览(879)

命令top:实时更新,且只打印部分进程,打印全部需参数处理即-b == top -b -n 1ps:静态数据,全部进程数据都显示出来 == ps

memoryOrCpuTop10.sh

  1. #!/bin/bash
  2. if [ ! $1 ];then
  3. echo "Usage: sh $0 [memory|cpu]"
  4. exit 1
  5. fi
  6. tempFile=$(mktemp memoryOrCpuTop10.temp.XXX)
  7. # 将进程信息放入临时文件中
  8. top -b -n 1 > $tempFile
  9. case $1 in
  10. memory)
  11. echo "占用内存最多的前10个进程"
  12. echo 'Memory Memory% PID COMMAND'
  13. # sort中的 -k 1表示 以每行第一个单词进行排序,-r倒序排序 -n每行第一个单词是数字形式
  14. tail -n +8 $tempFile | awk '{processInfo[$10" "$1" "$NF]+=$6}END{for (processPIDandName in processInfo) print processInfo[processPIDandName], processPIDandName}' | sort -k 1 -nr | head -10 | awk '{print int($1/1024)"MB "$2" "$3" "$4}'
  15. ;;
  16. cpu)
  17. echo "占用CPU最多的前10个进程"
  18. echo 'CPURate PID COMMAND'
  19. # sort中的 -k 1表示 以每行第一个单词进行排序,-r倒序排序 -n每行第一个单词是数字形式
  20. tail -n +8 $tempFile | awk '{processInfo[$1" "$NF]+=$9}END{for (processPIDandName in processInfo) print processInfo[processPIDandName], processPIDandName}' | sort -k 1 -nr | head -10
  21. ;;
  22. *)
  23. ;;
  24. esac
  25. rm -rf $tempFile

相关文章