日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

如何使用shell獲取進(jìn)程名的內(nèi)存以及CPU利用率_linux shell

作者:飛鳥真人 ? 更新時(shí)間: 2022-06-16 編程語言

原理:

1)使用ps得到進(jìn)程名的所有進(jìn)程pid

ps -C process_name  -o pid=

2) 使用 /proc/$pid/status獲得內(nèi)存的占用,并循環(huán)求和;

3)使用top獲取相關(guān)pid的cpu列表,并過濾第10列,求和。

在ubuntu18.04和centos7.9測試:

# !/bin/bash
# author:robin
# usage: bash proc.sh openresty
if [ -e cpu_mr.log ]
then
    rm -f cpu_mr.log
fi
 
pid_array=(122)
 
name=$1
if [ -z "$name" ] 
then
    name="openresty"
fi
#echo $name
 
#cpucmd: '-p 125 -p 235 -p 568'
cpucmd=''
i=0
 
#get all pid by proName
funGetPids(){
    tempstr=`ps -C $name -o pid=`
    #echo $tempstr
 
    
    for line in $tempstr
    do
        pid_array[$i]=$line
        #echo ${pid_array[$i]}
        let "i++"
        cpucmd=${cpucmd}" -p $line "
    done 
    return
}
funGetPids
 
if [ $i -eq 0 ] 
then
echo "{\"sum_vmrss\": -1,  \"sum_cpu\": -1 }"
exit 0
fi
 
sum_vmrss=0
sum_cpu=0.0
#compute mem sum
for pid in  ${pid_array[@]}
do
    vmrss_temp=`cat /proc/$pid/status|grep -e VmRSS|tr -d [:blank:][:alpha:][:]`
    #echo 'vmrss_temp= '  $vmrss_temp
    sum_vmrss=`expr $sum_vmrss + $vmrss_temp`
done
 
#echo $cpucmd
tempstr=`top -n 1 $cpucmd |tail -n +8 | awk '{print $10}'`
 
for line in $tempstr
do
#echo $line
sum_cpu=$(echo "$sum_cpu+$line"|bc)
done
 
# echo "-------------------"
echo "{\"sum_vmrss\": $sum_vmrss,  \"sum_cpu\": $sum_cpu }"
 
exit

使用方法:

bash proc.sh  gnome-shell

輸出json:

{"sum_vmrss": 423712, ?"sum_cpu": 6.7 }

總結(jié)

原文鏈接:https://blog.csdn.net/robinfoxnan/article/details/124195011

欄目分類
最近更新