python监控进程脚本
本文实例为大家分享了python监控进程脚本的具体代码,供大家参考,具体内容如下
原理:
监控一个指定进程,每隔5秒钟获取其CPU、内存使用量超过60%即kill掉该进程,获取其句柄数,超过300也kill掉该进程
运行环境是windows64位系统+python2.764位,这里需要使用到psutil类库,要另外安装。脚本里面可以自动安装,前提是你已经下载好了安装包psutil-3.3.0.win-amd64-py2.7.exe
下面看代码:
#!/usr/bin/envpython #-*-coding:utf-8-*- importtime fromdatetimeimportdate,datetime,timedelta importplatform importos importwin32ui,win32api,win32con,win32gui importsubprocess definstall(): print("installpsutil...") sysstr=platform.system() if(sysstr=="Windows"): print("CallWindowstasks") bit,type=platform.architecture() print("osbit:%s"%bit) #print("ostype:%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("willinstallthefile[%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==0andcount<20): print("thesetupisnorunning,willrunit...") count+=1 win32api.ShellExecute(0,'open',fileName,'','',0) print("sleep1seconds...") time.sleep(0.5) #wnd=win32ui.GetForegroundWindow() #printwnd.GetWindowText() hld=win32gui.FindWindow(None,label) print("hldis%s"%hld) pwin=win32ui.FindWindow(None,label) print("pwinis%s"%pwin) printpwin.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("installdone...") #鼠标点击 #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("CallLinuxtasks") else: print("OtherSystemtasks") try: print("importpsutil...") importpsutil exceptException,e: printException,":",e install() importpsutil defget_proc_by_id(pid): returnpsutil.Process(pid) defget_proc_by_name(pname): """getprocessbyname returnthefirstprocessiftherearemorethanone """ forprocinpsutil.process_iter(): try:#returniffoundone ifproc.name().lower()==pname.lower(): returnproc exceptpsutil.AccessDenied: pass exceptpsutil.NoSuchProcess: pass returnNone defgetProcess(pname,day=0,hour=0,min=0,second=0): #Inittime now=datetime.now() strnow=now.strftime('%Y-%m-%d%H:%M:%S') print"now:",strnow #Firstnextruntime 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"nextruntime:",strnext_time whileTrue: #Getsystemcurrenttime iter_now=datetime.now() iter_now_time=iter_now.strftime('%Y-%m-%d%H:%M:%S') ifstr(iter_now_time)==str(strnext_time): next_time=iter_now+period strnext_time=next_time.strftime('%Y-%m-%d%H:%M:%S') print"nextruntime:",strnext_time try: Process=get_proc_by_name(pname) exceptException,e: printException,":",e ifProcess!=None: print"-------Foundtheprocess:%s"%Process.name(); print("pidis(%s)"%Process.pid); Cpu_usage=Process.cpu_percent(interval=1) print("cpupercentis(%s)"%Cpu_usage); if(100-Cpu_usage)<0.1: print"cpupercentlarger60,nowwillterminatethisprocess!"; Process.terminate(); Process.wait(timeout=3); continue RAM_percent=Process.memory_percent() print("memorypercentis(%s)"%RAM_percent); if(60-RAM_percent)<0.1: print"memorypercentlarger60,nowwillterminatethisprocess!"; Process.terminate(); Process.wait(timeout=3); continue all_files=list(Process.open_files()); print("openfilessizeis(%d)"%len(all_files)); if(len(all_files)>300): print"openfilessizelarger300,nowwillterminatethisprocess!"; Process.terminate(); Process.wait(timeout=3); continue Threads_Num=Process.num_threads() print("threadsnumberis(%s)"%Threads_Num); if(Threads_Num>200): print"threadsnumberlarger200,nowwillterminatethisprocess!"; Process.terminate(); Process.wait(timeout=3); continue else: print"-------Nofoundtheprocess:%s"%pname; continue if__name__=='__main__': print("main....") getProcess("QQ.exe",second=5)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。