打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
windows平台下如何用Python杀进程 - 代码分享 - 开源中国社区
windows平台下如何用Python杀进程
hcqenjoy 发布于 2010年12月18日 20时 (0评) 1人收藏此代码, 我要收藏(?)
标签:

代码片段(1)

[代码] [Python]代码

01 Python语言: windows平台下如何用Python杀进程
02 #from : http://www.joyloft.net/?p=1031
03 # "这段代码来自于一个很简单的场景:
04 #  在python中调一个程序。给这个程序设置一个timeout
05 #  假如一段时间程序还没有返回,就杀掉这个这个新开的进程。
06 #  本来以为我肯定不是第一个遇到这个问题的人,
07 #  但是网上搜了好久都没找到完整的办法,自己搞了一个。"
08   
09 import ctypes
10 import sys
11   
12 TH32CS_SNAPPROCESS = 0x00000002
13 class PROCESSENTRY32(ctypes.Structure):
14      _fields_ = [("dwSize", ctypes.c_ulong),
15                  ("cntUsage", ctypes.c_ulong),
16                  ("th32ProcessID", ctypes.c_ulong),
17                  ("th32DefaultHeapID", ctypes.c_ulong),
18                  ("th32ModuleID", ctypes.c_ulong),
19                  ("cntThreads", ctypes.c_ulong),
20                  ("th32ParentProcessID", ctypes.c_ulong),
21                  ("pcPriClassBase", ctypes.c_ulong),
22                  ("dwFlags", ctypes.c_ulong),
23                  ("szExeFile", ctypes.c_char * 260)]
24   
25 def getProcList():
26     CreateToolhelp32Snapshot = ctypes.windll.kernel32.CreateToolhelp32Snapshot
27     Process32First = ctypes.windll.kernel32.Process32First
28     Process32Next = ctypes.windll.kernel32.Process32Next
29     CloseHandle = ctypes.windll.kernel32.CloseHandle
30     hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
31     pe32 = PROCESSENTRY32()
32     pe32.dwSize = ctypes.sizeof(PROCESSENTRY32)
33     if Process32First(hProcessSnap,ctypes.byref(pe32)) == False:
34         print >> sys.stderr, "Failed getting first process."
35         return
36     while True:
37         yield pe32
38         if Process32Next(hProcessSnap,ctypes.byref(pe32)) == False:
39             break
40     CloseHandle(hProcessSnap)
41   
42 def getChildPid(pid):
43     procList = getProcList()
44     for proc in procList:
45         if proc.th32ParentProcessID == pid:
46             yield proc.th32ProcessID
47       
48 def killPid(pid):
49     childList = getChildPid(pid)
50     for childPid in childList:
51         killPid(childPid)
52     handle = ctypes.windll.kernel32.OpenProcess(1, False, pid)
53     ctypes.windll.kernel32.TerminateProcess(handle,0)
54   
55   
56 if __name__ =='__main__':
57     args = sys.argv 
58     if len(args) >1 :
59         pid = int(args[1])
60         killPid(pid)
61     else:
62         procList = getProcList()
63         for proc in procList:
64             print proc.szExeFile+'  '+str(proc.th32ParentProcessID) + '  '+str(proc.th32ProcessID)
65       
66   
67 #----------------------
68 #
69 # Usage demo
70 #
71 #----------------------
72 import subprocess
73 import time
74   
75 #import winproc
76   
77 timeout = 2
78 process = subprocess.Popen("cmd /k ping localhost -t",shell = True)
79 start = int(time.time())
80 while process.poll()==None:
81     now = int(time.time())
82     if int (now - start) >timeout:
83         pid = process.pid
84         break
85   
86 winproc.killPid(pid)
87           
88 print "End"
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
在win7下GreenOdoo9开发环境的建立
Python windll.user32方法代码示例
Python与C之间的相互调用(PythonCAPI及Pythonctypes库)
从C#到Python手把手教你用Python实现内存扫描获取指定字符串
Python调用windows下DLL详解 - ctypes库的使用
python ctypes库中动态链接库加载方式
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服