本文实例为大家分享了python监控进程脚本的具体代码,供大家参考,具体内容如下
原理:
监控一个指定进程,每隔5秒钟获取其CPU、内存使用量超过60%即kill掉该进程,获取其句柄数,超过300也kill掉该进程
运行环境是windows 64位系统+python 2.7 64位 ,这里需要使用到psutil 类库,要另外安装。脚本里面可以自动安装,前提是你已经下载好了安装包psutil-3.3.0.win-amd64-py2.7.exe
下面看代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
|
#!/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 ) |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/tiantang_1986/article/details/50433882