监控网络通讯RX速率,并杀死CPU占有率最高的进程,Linux学习笔记(二)

问题:

后台运行一个shell程序,监控网络通讯RX或TX包在每秒100KB/s以上时,找到系统中CPU占有率最高的进程,并将其 杀死 。

思路

  1. 找到与RX,TX有关的参数,计算出RX,TX的速率(这里以RX为例,即当RX的速率超过100KB/s时)

    RXpre=$(ifconfig ${eth}|grep bytes|grep RX|awk '{print $5;}')
    

    该条指令找出当前RX速率,数据单位是 byte;
    中间停歇1秒

    sleep 1
    

    同样,一秒后RX的速率为

    RXnext=$(ifconfig ${eth}|grep bytes|grep RX|awk '{print $5;}')
    

    根据参数可以计算出,RX的速率(以KB/s为单位)

    $(((${RXnext}-${RXpre})/1024)) 
    
  2. 当RX的速率 > 100KB/s时,找系统中CPU占有率最高的进程并将其杀死
    按照CPU占有率对进程排序,并输出CPU占用率最高进程的信息,指令如下:

     ps aux|sort -rn -k+3|head -1  
    

    排序后,输出最高进程的PID

    ps aux|sort -rn -k+3|head -1|cut -c 9-15
    

    将CPU占有率最高的进程杀死

      ps aux|sort -rn -k+3|head -1|cut -c 9-15|xargs kill -s 9
    
  3. 使用if 语句将前两步语句连接起来:
    该部分的表达式如下:
    if [ $(((${RXnext}-${RXpre})/1024)) -gt $a ]
    then
    ps aux|sort -rn -k+3|head -1|cut -c 9-15|xargs kill -s 9
    fi

  4. 第四步,后台运行脚本,指令为正常运行指令加上&符号。

脚本代码:

#!/bin/bash
alias ifconfig="/sbin/ifconfig"
eth=enp0s3
a=100
while true;do
	RXpre=$(ifconfig ${eth}|grep bytes|grep RX|awk '{print $5;}')
	sleep 1
	RXnext=$(ifconfig ${eth}|grep bytes|grep RX|awk '{print $5;}')
	if [ $(((${RXnext}-${RXpre})/1024)) -gt $a ]
	then
		ps aux|sort -rn -k+3|head -1|cut -c 9-15|xargs kill -s 9
	fi


done

over 问题解决

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值