Linux脚本:如何编写bash脚本统计多个相关进程的CPU占用率,以此统计系统中指定多进程的总的CPU使用率

目录

一、需求

二、分析

三、脚本示例

1、创建脚本

2、编写脚本

3、脚本编写注意事项

(1)CPU占用率列

(2)多进程实例

(3)权限

四、运行脚本

1、给予脚本可执行权限

2、运行脚本

五、优化脚本

1、更改脚本

2、执行脚本


一、需求

       在linux环境下,视频软件要处理视频的编码、解码、拼接等等工作,会占用大量的CPU资源。所以,在这些视频软件的开发调试过程中,经常会出现各种性能问题,会导致程序、进程等出现异常情况。如果系统出现无响应或性能下降,查看系统中相关进程对CPU的使用率,可以帮助快速定位是否是本系统占用了过多的CPU资源,从而导致系统性能下降。

       因此,一个需求是如何统计视频软件程序相关的所有进程对CPU的占用率是多少?

二、分析

        在Linux中,可以通过一些命令来查看特定进程的CPU占用率,涉及到使用ps、grep、awk等命令来提取进程信息和它们的CPU使用率。

        然后,可以通过编写一个脚本来统计多个进程的CPU使用率的总和。

三、脚本示例

1、创建脚本

        创建一个名为 monitor_pros_cpu.sh 的脚本文件。

2、编写脚本

        使用编辑器打开  monitor_pros_cpu.sh 文件,并添加以下内容:

#!/bin/bash  # 确保至少有一个参数被传递  
if [ $# -eq 0 ]; then  echo "Usage: $0 <process_name1> [process_name2 ...]"  exit 1  
fi  # 遍历所有传入的进程名  
for process_name in "$@"  
do  # 使用系统的ps命令查找进程,并通过grep和awk提取CPU占用率  # 注:这里使用grep的-v选项排除grep自身进程,并使用awk处理输出  # 假设CPU占用率是ps命令输出的第三列(这可能根据你的ps版本和输出格式不同而有所不同,可以更改)  cpu_usage=$(ps -eo pid,args,%cpu --sort=-%cpu | grep -v grep | grep "$process_name" | awk '{print $3}')  # 检查是否找到进程  if [ -n "$cpu_usage" ]; then  echo "Process '$process_name' CPU usage: $cpu_usage%"  else  echo "Process '$process_name' not found."  fi  
done

3、脚本编写注意事项

(1)CPU占用率列

在上面的脚本中,假设CPU占用率是ps命令输出的第三列(%cpu)。这可能会根据ps版本和输出格式而有所不同。可以通过运行如下命令:

ps -eo pid,args,%cpu --sort=-%cpu

来查看你的系统上ps命令的实际输出,并相应地调整脚本中的列号。

(2)多进程实例

如果同一进程名有多个实例运行,上面的脚本将只打印出第一个找到实例的CPU占用率。如果你需要所有实例的CPU占用率,你可能需要稍微修改脚本,以便处理多个输出行。

(3)权限

确保你有足够的权限来查看所有进程的信息。在某些系统上,你可能需要使用sudo来运行这个脚本。

四、运行脚本

1、给予脚本可执行权限

        首先,给脚本执行权限:

        chmod +x monitor_pros_cpu.sh

2、运行脚本

        然后,你可以这样运行脚本,传递你感兴趣的进程名作为参数:

        ./monitor_pros_cpu.sh java

        实际操作如下图所示:

        或者,如果你想要同时监控多个进程:

        ./monitor_pros_cpu.sh java srs.out

        这将为每个指定的进程名输出其CPU占用率(如果存在的话)。

        实际操作如下图所示:

五、优化脚本

1、更改脚本

        前面的脚本只是统计每个进程的CPU占有率,要把这些进程的CPU占用率累加起来,应该如何修改脚本呢?             

        可以在脚本中添加一个变量来累加这些CPU占用率。比如增加一个变量:

                 total_cpu_usage=0 。

        优化后的脚本如下:

#!/bin/bash# 初始化CPU占用率总和为0
total_cpu_usage=0# 确保至少有一个参数被传递
if [ $# -eq 0 ]; thenecho "Usage: $0 <process_name1> [process_name2 ...]"exit 1
fi# 遍历所有传入的进程名
for process_name in "$@"
do# 使用ps命令查找进程,并通过grep和awk提取CPU占用率# 注意:这里使用grep的-v选项排除grep自身进程,并使用awk处理输出# 假设CPU占用率是ps命令输出的第三列(这可能根据你的ps版本和输出格式不同而有所不同)cpu_usage=$(ps -eo pid,args,%cpu --sort=-%cpu | grep -v grep | grep "$process_name" | awk '{print $5}')# 检查是否找到进程if [ -n "$cpu_usage" ]; then# 将百分比转换为小数(去掉%号)cpu_usage_decimal=$(echo "$cpu_usage" | sed 's/%//')# 累加CPU占用率(注意:这里的累加是基于小数形式的,但由于shell的算术运算限制,我们可能需要使用bc或awk)total_cpu_usage=$(echo "$total_cpu_usage + $cpu_usage_decimal" | bc)echo "Process '$process_name' CPU usage: $cpu_usage%"elseecho "Process '$process_name' not found."fi
done# 打印所有指定进程的CPU占用率总和(注意:这个总和可能不准确,因为它只是简单地将百分比转换为小数后相加)
echo "Total CPU usage of specified processes: ${total_cpu_usage}%"

2、执行脚本

        同时监控多个进程:

                ./monitor_pros_cpu.sh java srs.out  

        这将为每个指定的进程名输出其CPU占用率(如果存在的话),并统计所用进程的CPU占有率之和。

        实际操作如下:

         由图中可以看出,最后统计出来两个进程的CPU占有率之和为:0.2% + 1.1% =1.3%,结果正确。


文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3248976.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

linux live555编译以及rtsp服务器搭建

一、live555源码 下载&#xff1a;点击跳转 二、编译 1、往文件 config.linux里的 COMPILE_OPTS 添加以下两个参数 -DNO_STD_LIB 和 -DNO_OPENSSL1 &#xff0c;修改后如下&#xff1a; COMPILE_OPTS $(INCLUDES) -I/usr/local/include -I. -O2 -DNO_STD_LIB -DNO_OPENSS…

大数减法c++

这里写目录标题 key key 检查减数和被减数的大小&#xff0c;大的放前&#xff0c;小的放后确定结果是正数&#xff0c;还是负数&#xff0c;即符号位从低位开始减如果a[i]<b[i]&#xff0c;则向高位借1当10&#xff0c;a[i1]–;a[i]10 #include <iostream> #include…

【python】OpenCV—Coordinates Sorted Clockwise

文章目录 1、需求介绍2、算法实现3、完整代码 1、需求介绍 调用 opencv 库&#xff0c;绘制轮廓的矩形边框&#xff0c;坐标顺序为右下→左下→左上→右上&#xff0c;我们实现一下转化为熟悉的 左上→右上→右下→左下 形式 按照这样的顺序组织边界框坐标是执行透视转换或匹…

采用反相正基准电压电路的反相运算放大器(运放)

采用反相正基准电压电路的反相运算放大器(运放) 采用反相正基准电压电路的同相运算放大器&#xff08;运放&#xff09; 设计目标 输入ViMin输入ViMax输出VoMin输出VoMax电源电压Vcc电源电压Vee电源电压Vref-5V-1V0.05V3.3V5V0V5V 设计说明1 此设计使用具有反相正基准的反…

gite+picgo+typora打造个人免费笔记软件

文章目录 1️⃣个人笔记软件2️⃣ 配置教程2.1 使用软件2.2 node 环境配置2.3 软件安装2.4 gite仓库设置2.5 配置picgo2.6 测试检验2.7 github教程 &#x1f3a1; 完结撒花 1️⃣个人笔记软件 最近换了环境&#xff0c;没有之前的生产环境舒适&#xff0c;写笔记也没有劲头&…

盒须图boxplot 展示第6条线

正常情况下,盒须图是有5条线的,但是实际产品场景是需要6条线,看了下echarts官网,没看到可配置的地方,只能自己骚操作了,效果图如下: 重点:用两条x轴,第6条线挂在第二条x轴上,且第二条x轴不展示。 option = {...,xAxis: [{type: category,data: [Class1, Class2, Cl…

Web前端网页设计与制作(想起来哪里写哪里版)

本文技术栈基于HtmlCssJavaScript制作web页面以及功能实现的部分设计与展示&#xff0c;实际的网站开发会涉及更多的细节&#xff0c;包括但不限于用户认证、数据库存储、前端框架的使用、响应式设计、安全性措施等。 废话不说&#xff0c;直接看源码 1.index 首页&#xff1a…

【漏洞复现】泛微e-cology9 WorkflowServiceXml SQL注入漏洞

文章目录 前言漏洞描述影响范围 漏洞复现nuclei脚本 安全修复 前言 泛微协同管理应用平台e-cology是一套兼具企业信息门户、知识文档管理、工作流程管理、人力资源管理、客户关系管理、项目管理、财务管理、资产管理、供应链管理、数据中心功能的企业大型协同管理平台。 漏洞…

算法学习day16——刷题(仍然是数组)

一、图片平滑器 图像平滑器 是大小为 3 x 3 的过滤器&#xff0c;用于对图像的每个单元格平滑处理&#xff0c;平滑处理后单元格的值为该单元格的平均灰度。 每个单元格的 平均灰度 定义为&#xff1a;该单元格自身及其周围的 8 个单元格的平均值&#xff0c;结果需向下取整…

使用llama-cpp-python制作api接口

文章目录 概要整体操作流程技术细节小结 概要 使用llama-cpp-python制作api接口&#xff0c;可以接入gradio当中&#xff0c;参考上一节。 llama-cpp-python的github网址 整体操作流程 下载llama-cpp-python。首先判断自己是在CPU的环境下还是GPU的环境下。以下操作均在魔搭…

应用层——HTTP

像我们电脑和手机使用的应用软件就是在应用层写的&#xff0c;当我们的数据需要传输的时候换将数据传递到传输层。 应用层专门给用户提供应用功能&#xff0c;比如HTTP,FTP… 我们程序员写的一个个解决我们实际的问题都在应用层&#xff0c;我们今天来聊一聊HTTP。 协议 协议…

Java案例遍历集合中的自定义对象

目录 一&#xff1a;案例要求&#xff1a; 二案例分析&#xff1a; ​编辑三&#xff1a;具体代码&#xff1a; 四&#xff1a;运行结果&#xff1a; 一&#xff1a;案例要求&#xff1a; 二案例分析&#xff1a; 三&#xff1a;具体代码&#xff1a; Ⅰ&#xff1a; pack…

pyinstaller用法详解3

本文使用创作助手。 大家好&#xff0c;时隔多日&#xff0c;我又更新了pyinstaller的用法详解&#xff01; 当然&#xff0c;这一次要比之前更详细&#xff0c;十分详细。 谢谢大家的支持&#xff0c;我们现在开始&#xff01; 一、快速开始使用pyinstaller 我之前的文章…

Web3时代的教育技术革新:智能合约在学习管理中的应用

随着区块链技术的发展和普及&#xff0c;Web3时代正在为教育技术带来前所未有的革新和机遇。智能合约作为区块链技术的核心应用之一&#xff0c;不仅在金融和供应链管理等领域展示了其巨大的潜力&#xff0c;也在教育领域中逐渐探索和应用。本文将探讨智能合约在学习管理中的具…

Java 中的迭代器

Iterator (迭代器) 正是由于每一个容器都有取出元素的功能&#xff0c;这些功能定义都一样&#xff0c;所以对共性的取出功能进行了抽取&#xff0c;从而出现了Iterator接口。由于每一个容器的数据结构不一样&#xff0c;所以具体的实现方式也不同&#xff0c;每一个容器都在其…

[激光原理与应用-115]:南京科耐激光-激光焊接-焊中检测-智能制程监测系统IPM介绍 - 19 - 主要硬件的介绍、安装与调试

目录 一、概述 1.1 前言 1.2 系统组成 1.2.1 机柜版&#xff1a; 1.2.2 非机柜版 1.3适用范围 1.4 工作条件 1.5 安全说明 1.6 装箱清单 二、硬件安装 2.1 光学传感器安装 2.1.1 转接件安装 2.1.2 光路校准模块的安装与光路校准 2.1.3 光学传感器的安装 2.2 通…

Docker安装mysql详细教程, mysqld: Can‘t read dir of ‘/etc/mysql/conf.d/‘(已解决)

文章目录 一、下载MySQL的docker镜像二、启动MySQL容器2.1 命令2.2 报错mysqld: Cant read dir of /etc/mysql/conf.d/ (Errcode: 2 - No such file or directory) 三、进入mysql容器四、修改mysql默认配置4.1 查看mysql挂载的文件夹4.2 mysql配置 五、补充 如果还没在虚拟机/服…

新版本cesium编译1.103之后的版本

cesium1.1之后的版本文件结构域1.1之前的版本有了很大的差别&#xff0c;源码也全部移到了packages目录中。有很多依赖包没有写在根目录的package.json文件中。npm i 后直接编译会保持。 cesium源码git https://github.com/CesiumGS/cesium 1、添加缺少的包&#xff0c;缺少的…

《昇思25天学习打卡营第25天|onereal》

初学入门/初学教程/08-模型训练.ipynb 模型训练 模型训练一般分为四个步骤&#xff1a; 构建数据集。定义神经网络模型。定义超参、损失函数及优化器。输入数据集进行训练与评估。 现在我们有了数据集和模型后&#xff0c;可以进行模型的训练与评估。 构建数据集 首先从数…

SSD实现

一、模型 此模型主要由基础网络组成&#xff0c;其后是几个多尺度特征块。基本网络用于从输入图像中提取特征&#xff0c;因此它可以使用深度卷积神经网络。 单发多框检测选用了在分类层之前截断的VGG&#xff0c;现在也常用ResNet替代&#xff1b;可以设计基础网络&#xff0c…