pykill.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import os
  2. import win32process
  3. import win32con
  4. #import BTL.likewin32api as win32api
  5. import win32api
  6. def compare(x, y):
  7. """ tries to fuzzy match process names """
  8. if x.lower() == y.lower():
  9. return True
  10. y = '.'.join(y.split('.')[:-1])
  11. if x.lower() == y.lower():
  12. return True
  13. return False
  14. def kill_process(name):
  15. for pid in win32process.EnumProcesses():
  16. # do try not to kill yourself
  17. if pid == win32api.GetCurrentProcessId():
  18. continue
  19. try:
  20. p = win32api.OpenProcess(win32con.PROCESS_QUERY_INFORMATION
  21. | win32con.PROCESS_VM_READ
  22. | win32con.PROCESS_TERMINATE,
  23. False, pid)
  24. except:
  25. continue
  26. if not p:
  27. continue
  28. try:
  29. hl = win32process.EnumProcessModules(p)
  30. except:
  31. win32api.CloseHandle(p)
  32. continue
  33. h = hl[0]
  34. pname = win32process.GetModuleFileNameEx(p, h)
  35. root, pname = os.path.split(pname)
  36. #print name, pname
  37. if compare(name, pname):
  38. #print "KILL", pname
  39. win32api.TerminateProcess(p, 0)
  40. win32api.CloseHandle(p)
  41. return True
  42. win32api.CloseHandle(p)
  43. return False
  44. if __name__ == '__main__':
  45. import sys
  46. n = sys.argv[1]
  47. r = kill_process(n)
  48. if r:
  49. print n, "killed"
  50. else:
  51. print n, "not killed"