python监控进程脚本


Posted in Python onApril 12, 2018

本文实例为大家分享了python监控进程脚本的具体代码,供大家参考,具体内容如下

原理:

监控一个指定进程,每隔5秒钟获取其CPU、内存使用量超过60%即kill掉该进程,获取其句柄数,超过300也kill掉该进程

运行环境是windows 64位系统+python 2.7 64位 ,这里需要使用到psutil 类库,要另外安装。脚本里面可以自动安装,前提是你已经下载好了安装包psutil-3.3.0.win-amd64-py2.7.exe

下面看代码:

#!/usr/bin/env python 
# -*- coding:utf-8 -*- 
 
 
import time 
from datetime import date, datetime, timedelta 
import platform 
import os 
import win32ui,win32api,win32con,win32gui 
import subprocess 
 
 
def install(): 
 print("install psutil...") 
 sysstr = platform.system() 
 if(sysstr =="Windows"): 
  print ("Call Windows tasks") 
  bit,type=platform.architecture() 
  print ("os bit: %s " % bit) 
  #print ("os type: %s " % type) 
  if(bit == "64bit"): 
   fileName="psutil-3.3.0.win-amd64-py2.7.exe"; 
  else: 
   fileName="psutil-3.3.0.win32-py2.7.exe"; 
  print("will install the file [%s]" % fileName) 
   
  #启动程序--4种方法 
  #subprocess.Popen(fileName); #非阻塞 
  #subprocess.Popen(fileName).wati(); #阻塞   
  #os.system(fileName); #阻塞 
  #win32api.ShellExecute(0, 'open', fileName, '','',0) 
   
  label = 'Setup' #此处假设主窗口名为tt 
  hld = win32gui.FindWindow(None, label)   
  count=0 
  while (hld == 0 and count<20): 
   print("the setup is no running,will run it...") 
   count += 1 
   win32api.ShellExecute(0, 'open', fileName, '','',0)    
   print("sleep 1 seconds...") 
   time.sleep(0.5) 
   #wnd = win32ui.GetForegroundWindow() 
   #print wnd.GetWindowText() 
   hld = win32gui.FindWindow(None, label) 
   print("hld is %s" % hld) 
   
  pwin=win32ui.FindWindow(None,label)   
  print("pwin is %s" % pwin) 
  print pwin.GetWindowText() 
  print("click...") 
  button2=win32ui.FindWindowEx(pwin,None,None,'下一步(&N) >') #找到按钮 
  button2.SendMessage(win32con.BM_CLICK, 0,-1) 
  button2=win32ui.FindWindowEx(pwin,None,None,'下一步(&N) >') #找到按钮 
  button2.SendMessage(win32con.BM_CLICK, 0,-1) 
  button2=win32ui.FindWindowEx(pwin,None,None,'下一步(&N) >') #找到按钮 
  button2.SendMessage(win32con.BM_CLICK, 0,-1) 
  button2=win32ui.FindWindowEx(pwin,None,None,'完成') #找到按钮 
  button2.SendMessage(win32con.BM_CLICK, 0,-1) 
  print("install done...") 
 
 
  # 鼠标点击 
  #print("click...") 
  #win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0) 
  #time.sleep(0.1) 
  #win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0) 
  #time.sleep(1) 
  #win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0) 
  #time.sleep(0.1) 
  #win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0) 
  #time.sleep(1) 
  #win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0) 
  #time.sleep(0.1) 
  #win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0) 
  #time.sleep(1) 
  #win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0) 
  #time.sleep(0.1) 
  #win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0) 
   
 elif(sysstr == "Linux"): 
  print ("Call Linux tasks") 
 else: 
  print ("Other System tasks") 
   
try: 
 print("import psutil...") 
 import psutil  
except Exception,e: 
 print Exception,":",e 
 install() 
 import psutil 
 
 
 
def get_proc_by_id(pid): 
 return psutil.Process(pid) 
 
 
def get_proc_by_name(pname): 
 """ get process by name 
  
 return the first process if there are more than one 
 """ 
 for proc in psutil.process_iter(): 
  try: 
<span style="white-space:pre">   </span># return if found one 
   if proc.name().lower() == pname.lower():<span style="white-space:pre">   </span> 
    return proc<span style="white-space:pre">    </span> 
  except psutil.AccessDenied: 
   pass 
  except psutil.NoSuchProcess: 
   pass 
 return None 
 
 
 
 
def getProcess(pname, day=0, hour=0, min=0, second=0):  
 # Init time 
 now = datetime.now() 
 strnow = now.strftime('%Y-%m-%d %H:%M:%S') 
 print "now:",strnow 
 # First next run time 
 period = timedelta(days=day, hours=hour, minutes=min, seconds=second) 
 next_time = now + period 
 strnext_time = next_time.strftime('%Y-%m-%d %H:%M:%S') 
 print "next run time:",strnext_time 
 while True: 
  # Get system current time 
  iter_now = datetime.now() 
  iter_now_time = iter_now.strftime('%Y-%m-%d %H:%M:%S')  
  if str(iter_now_time) == str(strnext_time): 
   next_time = iter_now + period 
   strnext_time = next_time.strftime('%Y-%m-%d %H:%M:%S') 
   print "next run time:",strnext_time 
    
   try: 
    Process=get_proc_by_name(pname) 
   except Exception,e: 
    print Exception,":",e 
   if Process != None : 
    print "-------Found the process : %s" % Process.name(); 
    print("pid is (%s)" % Process.pid); 
    Cpu_usage = Process.cpu_percent(interval=1) 
    print("cpu percent is (%s)" % Cpu_usage); 
    if (100-Cpu_usage) < 0.1 : 
     print "cpu percent larger 60,now will terminate this process !"; 
     Process.terminate(); 
     Process.wait(timeout=3); 
     continue 
    RAM_percent = Process.memory_percent() 
    print("memory percent is (%s)" % RAM_percent); 
    if (60-RAM_percent) < 0.1 : 
     print "memory percent larger 60,now will terminate this process !"; 
     Process.terminate(); 
     Process.wait(timeout=3); 
     continue   
    all_files = list(Process.open_files()); 
    print("open files size is (%d)" % len(all_files)); 
    if (len(all_files)>300) : 
     print "open files size larger 300,now will terminate this process !"; 
     Process.terminate(); 
     Process.wait(timeout=3); 
     continue 
    Threads_Num=Process.num_threads() 
    print("threads number is (%s)" % Threads_Num); 
    if (Threads_Num>200) : 
     print "threads number larger 200,now will terminate this process !"; 
     Process.terminate(); 
     Process.wait(timeout=3); 
     continue 
   else : 
    print "-------No found the process : %s" % pname; 
    
   continue 
 
 
if __name__ == '__main__': 
 print("main....") 
 getProcess("QQ.exe",second=5)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
用python + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试
Jul 14 Python
Django中URL视图函数的一些高级概念介绍
Jul 20 Python
Python 正则表达式入门(中级篇)
Dec 07 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
Apr 21 Python
Django 连接sql server数据库的方法
Jun 30 Python
在pycharm上mongodb配置及可视化设置方法
Nov 30 Python
Python 多线程不加锁分块读取文件的方法
Dec 11 Python
pycharm设置鼠标悬停查看方法设置
Jul 29 Python
解决Numpy中sum函数求和结果维度的问题
Dec 06 Python
python 使用raw socket进行TCP SYN扫描实例
May 05 Python
python安装和pycharm环境搭建设置方法
May 27 Python
Python中socket网络通信是干嘛的
May 27 Python
使用Eclipse如何开发python脚本
Apr 11 #Python
一份python入门应该看的学习资料
Apr 11 #Python
Python实现时钟显示效果思路详解
Apr 11 #Python
pandas数据分组和聚合操作方法
Apr 11 #Python
使用pandas对矢量化数据进行替换处理的方法
Apr 11 #Python
pandas数据框,统计某列数据对应的个数方法
Apr 11 #Python
pandas按若干个列的组合条件筛选数据的方法
Apr 11 #Python
You might like
《星际争霸II》全新指挥官斯台特曼现已上线
2020/03/08 星际争霸
PHP实现Soap通讯的方法
2014/11/03 PHP
thinkphp jquery实现图片上传和预览效果
2020/07/22 PHP
PHP二维数组分页2种实现方法解析
2020/07/09 PHP
js比较日期大小的方法
2015/05/12 Javascript
超详细的javascript数组方法汇总
2015/11/21 Javascript
基于jquery实现轮播焦点图插件
2016/03/31 Javascript
基于jquery实现轮播特效
2016/04/22 Javascript
原生javascript实现的ajax异步封装功能示例
2016/11/03 Javascript
jQuery插件HighCharts实现的2D对数饼图效果示例【附demo源码下载】
2017/03/09 Javascript
浅谈struts1 &amp; jquery form 文件异步上传
2017/05/25 jQuery
vue2.0 自定义 饼状图 (Echarts)组件的方法
2018/03/02 Javascript
JS中promise化微信小程序api
2018/04/12 Javascript
koa2实现登录注册功能的示例代码
2018/12/03 Javascript
echarts大屏字体自适应的方法步骤
2019/07/12 Javascript
JavaScript基于SVG的图片切换效果实例代码
2020/12/15 Javascript
Python利用BeautifulSoup解析Html的方法示例
2017/07/30 Python
Python实现爬虫设置代理IP和伪装成浏览器的方法分享
2018/05/07 Python
Python3 全自动更新已安装的模块实现
2020/01/06 Python
windows系统Tensorflow2.x简单安装记录(图文)
2021/01/18 Python
用纯CSS3实现网页中常见的小箭头
2017/10/16 HTML / CSS
CSS3实现王者荣耀匹配人员加载页面的方法
2019/04/16 HTML / CSS
美国南加州的原创极限运动潮牌:Vans(范斯)
2016/08/05 全球购物
Mio Skincare美国官网:身体紧致及孕期身体护理
2017/03/05 全球购物
Etam艾格英国官网:法国著名女装品牌
2019/04/15 全球购物
英国Radley包德国官网:Radley London德国
2019/11/18 全球购物
学校后勤人员职责
2013/12/27 职场文书
教师校本培训方案
2014/02/26 职场文书
目标责任书范本
2014/04/16 职场文书
小学绿色学校申报材料
2014/08/23 职场文书
厨师长岗位职责范本
2014/08/25 职场文书
支部书记四风对照材料
2014/08/28 职场文书
2014财务人员自我评价范文
2014/09/21 职场文书
Python手拉手教你爬取贝壳房源数据的实战教程
2021/05/21 Python
关于redisson缓存序列化几枚大坑说明
2021/08/04 Redis
动漫APP软件排行榜前十名,半次元上榜,第一款由腾讯公司推出
2022/03/18 杂记