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

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

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

memoryOrCpuTop10.sh

#!/bin/bash

if [ ! $1 ];then
  echo "Usage: sh $0 [memory|cpu]"
  exit 1
fi

tempFile=$(mktemp memoryOrCpuTop10.temp.XXX)

# 将进程信息放入临时文件中
top -b -n 1 > $tempFile

case $1 in
memory)
  echo "占用内存最多的前10个进程"
  echo 'Memory Memory% PID COMMAND'
  # sort中的  -k 1表示 以每行第一个单词进行排序,-r倒序排序  -n每行第一个单词是数字形式
  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}'
  ;;
cpu)
  echo "占用CPU最多的前10个进程"
  echo 'CPURate PID COMMAND'
  # sort中的  -k 1表示 以每行第一个单词进行排序,-r倒序排序  -n每行第一个单词是数字形式
  tail -n +8 $tempFile | awk '{processInfo[$1" "$NF]+=$9}END{for (processPIDandName in processInfo) print processInfo[processPIDandName], processPIDandName}' | sort -k 1 -nr  | head -10
  ;;
*)
  ;;
esac

rm -rf $tempFile

相关文章