如何使用shell获取进程名的内存以及CPU利用率

目录
  • 原理:
  • 在ubuntu18.04和centos7.9测试:
  • 使用方法:
  • 总结

原理:

1)使用ps得到进程名的所有进程pid

ps -C process_name  -o pid=

2) 使用 /proc/$pid/status获得内存的占用,并循环求和;

3)使用top获取相关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 }

总结

到此这篇关于如何使用shell获取进程名的内存以及CPU利用率的文章就介绍到这了,更多相关shell获取进程名内存内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • linux shell 根据进程名获取pid的实现方法

    导读 Linux 的交互式 Shell 与 Shell 脚本存在一定的差异,主要是由于后者存在一个独立的运行进程,因此在获取进程 pid 上二者也有所区别. 交互式 Bash Shell 获取进程 pid 在已知进程名(name)的前提下,交互式 Shell 获取进程 pid 有很多种方法,典型的通过 grep 获取 pid 的方法为(这里添加 -v grep是为了避免匹配到 grep 进程): ps -ef | grep "name" | grep -v grep | awk '{p

  • 如何使用shell获取进程名的内存以及CPU利用率

    目录 原理: 在ubuntu18.04和centos7.9测试: 使用方法: 总结 原理: 1)使用ps得到进程名的所有进程pid ps -C process_name -o pid= 2) 使用 /proc/$pid/status获得内存的占用,并循环求和: 3)使用top获取相关pid的cpu列表,并过滤第10列,求和. 在ubuntu18.04和centos7.9测试: # !/bin/bash # author:robin # usage: bash proc.sh openresty

  • Android 如何获取手机总内存和可用内存等信息

    在android开发中,有时候我们想获取手机的一些硬件信息,比如android手机的总内存和可用内存大小. 这个该如何实现呢? 通过读取文件"/proc/meminfo"的信息能够获取手机Memory的总量,而通过ActivityManager.getMemoryInfo(ActivityManager.MemoryInfo)方法可以获取当前的可用Memory量.       "/proc/meminfo"文件记录了android手机的一些内存信息,在命令行窗口里输

  • python执行shell获取硬件参数写入mysql的方法

    本文实例讲述了python执行shell获取硬件参数写入mysql的方法.分享给大家供大家参考.具体分析如下: 最近要获取服务器各种参数,包括cpu.内存.磁盘.型号等信息.试用了Hyperic HQ.Nagios和Snmp,它们功能都挺强大的,但是于需求不是太符,亦或者太heavy. 于是乎想到用python执行shell获取这些信息,python执行shell脚本有以下三种方法: 1. os.system() 复制代码 代码如下: os.system('ls') #返回结果0或者1,不能得到

  • linux根据pid获取进程名和获取进程pid(c语言获取pid)

    Liunx中通过进程名查找进程PID可以通过 pidof [进程名] 来查找.反过来 ,相同通过PID查找进程名则没有相关命令.在linux根目录中,有一个/proc的VFS(虚拟文件系统),系统当前运行的所有进程都对应于该目录下的一个以进程PID命名的文件夹,其中存放进程运行的N多信息.其中有一个status文件,cat显示该文件, 第一行的Name即为进程名. 打开stardict程序,进程名为stardict: shell中分别根据Pid获取进程名.根据进程名获取Pid 1)查找stard

  • Android编程实现获取系统内存、CPU使用率及状态栏高度的方法示例

    本文实例讲述了Android编程实现获取系统内存.CPU使用率及状态栏高度的方法.分享给大家供大家参考,具体如下: DeviceInfoManage类用于获取系统的内存,CPU的信息,以及状态栏的高度 import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReade

  • 利用shell获取指定日期前N天的日期

    一.创建测试文件test.sh #!/bin/sh . /etc/profile # 参数: # args[0] ,数据日期,日期格式yyyy-MM-dd # 取30天以前的日期 function get_date_30daysbefore() { sec=`date -d $1 +%s` sec_30daysbefore=$((sec - 86400*30)) days_before=`date -d @$sec_30daysbefore +%F` echo $days_before } if

  • python和shell获取文本内容的方法

    这两天搞脚本,花费不少时间. Python和Shell都可以获取文本内容,网上许多资料介绍的都不具体.简单的使用Python和Shell写了脚本. 做一些笔记沉淀一下. 1.Python实现: #-*- encoding:UTF-8 -*- filehandler = open('f.txt','r') #以读方式打开文件,rb为二进制方式(如图片或可执行文件等) print filehandler.read() #读取整个文件 filehandler.close() #关闭文件句柄 2.She

  • Python 运行 shell 获取输出结果的实例

    首先使用内置模块os. >>> import os >>> code = os.system("pwd && sleep 2") # /User/zhipeng >>> print code # 0 问题是 os.system 只能获取到结束状态 使用内置模块 subprocess >>> import subprocess >>> subprocess.Popen("p

  • Linux Shell获取文件夹下的文件名方法

    有时候需要获取某个文件夹下的所有文件名,可以用程序实现,但是打开IDE,编译运行太麻烦,在Linux服务器中通常不能打开IDE,此时可以用几行简单的shell命令来实现,结果保存到某个文件中即可. Shell脚本如下: #!/bin/bash # get all filename in specified path path=$1 files=$(ls $path) for filename in $files do echo $filename >> filename.txt done 以上

随机推荐