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 Django做网页
Nov 04 Python
python操作gmail实例
Jan 14 Python
Python中字符串对齐方法介绍
May 21 Python
Python实现合并同一个文件夹下所有PDF文件的方法示例
Apr 28 Python
Django unittest 设置跳过某些case的方法
Dec 26 Python
对Python Class之间函数的调用关系详解
Jan 23 Python
python使用Paramiko模块实现远程文件拷贝
Apr 30 Python
python gdal安装与简单使用
Aug 01 Python
Python自动化完成tb喵币任务的操作方法
Oct 30 Python
基于Python组装jmx并调用JMeter实现压力测试
Nov 03 Python
如何查看python关键字
Jan 17 Python
Python中for后接else的语法使用
May 18 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
使用PHP的日期与时间函数技巧
2008/04/24 PHP
微信支付PHP SDK之微信公众号支付代码详解
2015/12/09 PHP
PHP7 新特性详细介绍
2016/09/06 PHP
深入理解PHP的远程多会话调试
2017/09/21 PHP
javascript 数组排序函数sort和reverse使用介绍
2013/11/21 Javascript
jquery复选框全选/取消示例
2013/12/30 Javascript
JavaScript使用RegExp进行正则匹配的方法
2015/07/11 Javascript
JS插件overlib用法实例详解
2015/12/26 Javascript
js倒计时简单实现代码
2016/08/11 Javascript
第一次动手实现bootstrap table分页效果
2016/09/22 Javascript
关于JavaScript和jQuery的类型判断详解
2016/10/08 Javascript
通过网页查看JS源码中汉字显示乱码的解决方法
2016/10/26 Javascript
详解JavaScript RegExp对象
2017/02/04 Javascript
javascript 中Cookie读、写与删除操作
2017/03/29 Javascript
Node.js利用js-xlsx处理Excel文件的方法详解
2017/07/05 Javascript
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
2019/01/08 Javascript
JS实现简单移动端鼠标拖拽
2020/07/23 Javascript
Python实现方便使用的级联进度信息实例
2015/05/05 Python
mac系统安装Python3初体验
2018/01/02 Python
python pandas中对Series数据进行轴向连接的实例
2018/06/08 Python
python 实现矩阵上下/左右翻转,转置的示例
2019/01/23 Python
Python 元组操作总结
2019/09/18 Python
详解用selenium来下载小姐姐图片并保存
2021/01/26 Python
Python页面加载的等待方式总结
2021/02/28 Python
传统HTML页面实现模块化加载的方法
2018/10/15 HTML / CSS
斯洛伐克时尚服装网上商店:Cellbes
2016/10/20 全球购物
土木工程应届生自荐信
2013/09/24 职场文书
集体生日活动方案
2014/08/18 职场文书
中学生旷课检讨书2篇
2014/10/09 职场文书
硕士学位论文评语
2014/12/31 职场文书
英语感谢信范文
2015/01/20 职场文书
教师节感谢信
2015/01/22 职场文书
刑事申诉状范文
2015/05/20 职场文书
幼儿园教师培训心得体会
2016/01/21 职场文书
简单谈谈Python面向对象的相关知识
2021/06/28 Python
Redis 中使用 list,streams,pub/sub 几种方式实现消息队列的问题
2022/03/16 Redis