侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

python监控进程脚本

Python  /  管理员 发布于 7年前   144

本文实例为大家分享了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 pandas dataframe 按列或者按行合并的方法
    下一条:
    使用Eclipse如何开发python脚本
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客