| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- import os
- import win32process
- import win32con
- #import BTL.likewin32api as win32api
- import win32api
- def compare(x, y):
- """ tries to fuzzy match process names """
- if x.lower() == y.lower():
- return True
- y = '.'.join(y.split('.')[:-1])
- if x.lower() == y.lower():
- return True
- return False
- def kill_process(name):
-
- for pid in win32process.EnumProcesses():
-
- # do try not to kill yourself
- if pid == win32api.GetCurrentProcessId():
- continue
-
- try:
- p = win32api.OpenProcess(win32con.PROCESS_QUERY_INFORMATION
- | win32con.PROCESS_VM_READ
- | win32con.PROCESS_TERMINATE,
- False, pid)
- except:
- continue
- if not p:
- continue
-
- try:
- hl = win32process.EnumProcessModules(p)
- except:
- win32api.CloseHandle(p)
- continue
- h = hl[0]
- pname = win32process.GetModuleFileNameEx(p, h)
- root, pname = os.path.split(pname)
- #print name, pname
- if compare(name, pname):
- #print "KILL", pname
- win32api.TerminateProcess(p, 0)
- win32api.CloseHandle(p)
- return True
- win32api.CloseHandle(p)
- return False
- if __name__ == '__main__':
- import sys
- n = sys.argv[1]
- r = kill_process(n)
- if r:
- print n, "killed"
- else:
- print n, "not killed"
|