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)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。