windows平台下如何用Python杀进程,平台python,[Python]代码Py
windows平台下如何用Python杀进程,平台python,[Python]代码Py
[Python]代码
Python语言: windows平台下如何用Python杀进程#from : http://www.joyloft.net/?p=1031# "这段代码来自于一个很简单的场景:# 在python中调一个程序。给这个程序设置一个timeout# 假如一段时间程序还没有返回,就杀掉这个这个新开的进程。# 本来以为我肯定不是第一个遇到这个问题的人,# 但是网上搜了好久都没找到完整的办法,自己搞了一个。"import ctypesimport sysTH32CS_SNAPPROCESS = 0x00000002class PROCESSENTRY32(ctypes.Structure): _fields_ = [("dwSize", ctypes.c_ulong), ("cntUsage", ctypes.c_ulong), ("th32ProcessID", ctypes.c_ulong), ("th32DefaultHeapID", ctypes.c_ulong), ("th32ModuleID", ctypes.c_ulong), ("cntThreads", ctypes.c_ulong), ("th32ParentProcessID", ctypes.c_ulong), ("pcPriClassBase", ctypes.c_ulong), ("dwFlags", ctypes.c_ulong), ("szExeFile", ctypes.c_char * 260)]def getProcList(): CreateToolhelp32Snapshot = ctypes.windll.kernel32.CreateToolhelp32Snapshot Process32First = ctypes.windll.kernel32.Process32First Process32Next = ctypes.windll.kernel32.Process32Next CloseHandle = ctypes.windll.kernel32.CloseHandle hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0) pe32 = PROCESSENTRY32() pe32.dwSize = ctypes.sizeof(PROCESSENTRY32) if Process32First(hProcessSnap,ctypes.byref(pe32)) == False: print >> sys.stderr, "Failed getting first process." return while True: yield pe32 if Process32Next(hProcessSnap,ctypes.byref(pe32)) == False: break CloseHandle(hProcessSnap)def getChildPid(pid): procList = getProcList() for proc in procList: if proc.th32ParentProcessID == pid: yield proc.th32ProcessIDdef killPid(pid): childList = getChildPid(pid) for childPid in childList: killPid(childPid) handle = ctypes.windll.kernel32.OpenProcess(1, False, pid) ctypes.windll.kernel32.TerminateProcess(handle,0)if __name__ =='__main__': args = sys.argv if len(args) >1 : pid = int(args[1]) killPid(pid) else: procList = getProcList() for proc in procList: print proc.szExeFile+' '+str(proc.th32ParentProcessID) + ' '+str(proc.th32ProcessID)#----------------------## Usage demo##----------------------import subprocessimport time#import winproctimeout = 2process = subprocess.Popen("cmd /k ping localhost -t",shell = True)start = int(time.time())while process.poll()==None: now = int(time.time()) if int (now - start) >timeout: pid = process.pid breakwinproc.killPid(pid)print "End"
相关内容
- Python脚本实现查找文件,,[Python]代码#c
- Python uuid模块,pythonuuid模块,python模块之uui
- 理解Python元类(Metaclasses),元类metaclasses,“元类的魔
- Python数组功能特点分析,python数组功能特点,实际上Py
- python 使用poplib pop3协议收取邮件,pythonpoplib,[Python]代码
- c,c++,java,python,ruby实现将文件读入数组的,pythonruby,c实现
- python从文本文件中选出使用频率最多的单词,,[Python]代
- python修改Windows注册表切换ie代理,pythonie,[Python]代码#
- python实现独身模式,python实现独身,class A:
- Python使用Decorator实现独身模式,pythondecorator,下面是要求
评论关闭