首页 > 系统相关 >获取某个进程执行时长

获取某个进程执行时长

时间:2024-03-15 16:22:21浏览次数:26  
标签:count exec print echo 获取 awk time 某个 进程

#!/bin/sh
time_out=10

if [ ! -n "$1" ] ;then
    echo "need to input a script name."
    exit
fi

pid_string=`ps -eo pid,etime,comm,args | grep -i "$1" | grep -v grep`
#3. 从这一条记录信息中抽取出etime数据,即第二列的值09:42:09,并赋值给exec_time变量。
exec_time=`echo $pid_string | awk '{print $2}'`
#4. 获取exec_time变量的时间组成部分的数量,这里是3个部分,即时:分:秒,是上述格式中的第二种。
time_field_count=`echo $exec_time | awk -F: '{print NF}'`
#5. 从exec_time变量中直接提取分钟数,即倒数第二列的数据(42)。
count_of_minutes=`echo $exec_time | awk -F: '{print $(NF-1)}'`
  
#6. 判断当前exec_time变量存储的时间数据是属于以上哪种格式。
#7. 如果是第一种,那么天数和小时数均为0。
#8. 如果是后两种之一,则需要继续判断到底是第一种还是第二种,如果是第二种,其小时部分将不存在横线(-)分隔符分隔天数和小时数,否则需要将这两个时间字段继续拆分,以获取具体的天数和小时数。对于第二种,天数为0.
if [ $time_field_count -lt 3 ]; then
  count_of_hours=0
  count_of_days=0
else
  count_of_hours=`echo $exec_time | awk -F: '{print $(NF-2)}'`
  fields=`echo $count_of_hours | awk -F- '{print NF}'`
  if [ $fields -ne 1 ]; then
    count_of_days=`echo $count_of_hours | awk -F- '{print $1}'`
    count_of_hours=`echo $count_of_hours | awk -F- '{print $2}'`
  else
    count_of_days=0
  fi
fi
#9. 通过之前代码获取的各个字段值,计算出该进程实际所流经的分钟数。
#10. bc命令是计算器命令,可以将echo输出的数学表达式计算为最终的数字值。
elapsed_minutes=`echo "$count_of_days*1440+$count_of_hours*60+$count_of_minutes" | bc`
if [[ elapsed_minutes -gt ${time_out} ]];then
    ps -eo pid,etime,comm,args | grep -i "$1" | grep -v grep | awk '{print $1}' | xargs kill -9
    else
        echo "The elapsed minutes of init process is" $elapsed_minutes "minutes."
fi

标签:count,exec,print,echo,获取,awk,time,某个,进程
From: https://www.cnblogs.com/netstat/p/18075701

相关文章

  • 进程守护
    #!/bin/shdeclare-Amodules=(["gateway"]="zt-gateway"["auth"]="zt-auth"["site"]="zt-modules-site"["system"]="zt-modules-system"["chip"]="zt-modules-chip&qu......
  • php多进程引发mysql查询问题
    1、报错:Packetsoutoforder.Expected1received56.Packetsize=3159346开始配置my.cnf的max_allowed_packet=2G可是没什么卵用原因:个人判断是因在laravelmysql的连接是随着php销毁而销毁;所以会保持数据库的连接会话能重复使用所以要配置database.php  配置文件opt......
  • 通过DCERPC和ntlmssp获取Windows远程主机信息
    最初首发于:https://www.freebuf.com/articles/system/334948.html前言本文通过利用DCERPC协议的ping,并附加NTLMSSP认证信息来获取获取windows远程主机的版本号,主机名,所在域的域名,DNS等信息。因为通过rpc进行探测的工具,大部分都是依托impacket来实现,而实战中通过挂代理进行内网......
  • QT网络编程之获取本机网络信息
    一.概述查询一个主机的MAC地址或者IP地址是网络应用中常用到的功能,Qt提供了QHostInfo和QNetworkInterface类可以用于此类信息的查询1.QHostInfo类(显示和查找本地的信息)2.QNetworkInterface类(获得应用程序上所在主机的所有网络接口,包括子网掩码和广播地址) 推荐一个不错......
  • python项目开发——总结笔记(csv excel读取 服务端端口进程 拟合预测 时间格式转化 服
    目录部署服务端程序主服务端控制程序main.py子目录的计算程序jisuan.py读取数据读取csv数据读取读取excel时间格式转换时间戳转datetime并且生成时间序列最后格式化时间 常用函数拟合预测服务端程序控制与维护部署服务端程序主服务端控制程序main.pyfromfl......
  • 【Linux】进程状态
    1Linux内核源代码为了弄明白正在运行的进程是什么意思,我们需要知道进程的不同状态。一个进程可以有几个状态(在Linux内核里,进程有时候也叫做任务)。下面的状态在kernel源代码里定义:/**Thetaskstatearrayisastrange"bitmap"of*reasonstosleep.Thus"running"i......
  • 获取微信联系人列表的一种方法
    获取微信联系人列表的一种方法代码图例本文提供了一种获取微信的联系人列表的方法,步骤如下:给微信的联系人加上备注登录微信windowspc客户端,打开通讯录管理调整窗口大小,让备注这一列的内容完整显示使用FSCapture工具截取该窗口的长图(选中窗口,点击捕捉滚......
  • 进程间通信的六种方式
    每个进程的用户地址空间都是独立的,一般而言是不能互相访问的,但内核空间是每个进程都共享的,所以进程之间要通信必须通过内核一、管道匿名管道通过fork()系统调用创建的子进程与父进程之间的通信通道,另外还可以通过以下操作实现非父子进程之间的通信catxxx|wc-l命名管......
  • 3/14学习进程
    大二学期第三周日报 第一天第二天第三天第四天第五天所花时间(包括上课) 210min90min 150min 0min 代码量(行) 350 200 250 0 博客量(篇) 1 1 1 1 了解到的知识点编写安卓增删改查,使用sqlite存储数据 ......
  • 在Linux中,如何查看系统当前运行的进程以及它们的状态?
    在Linux中查看当前系统运行的进程以及它们的状态,可以使用多种命令工具,以下是一些常用的方法:ps命令:最基础的查看进程信息方式是使用ps命令。简单查看当前终端下的进程,可以输入:ps若想查看所有进程,包括其他终端下的进程,可以加上-e参数:ps-e若要查看详细的进程信......