home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 July / CMCD0704.ISO / Software / Shareware / Comunicatii / jyte / jyte.exe / killProcName.py < prev    next >
Text File  |  1999-11-21  |  2KB  |  57 lines

  1. # Kills a process by process name
  2. #
  3. # Uses the Performance Data Helper to locate the PID, then kills it.
  4. # Will only kill the process if there is only one process of that name
  5. # (eg, attempting to kill "Python.exe" will only work if there is only
  6. # one Python.exe running.  (Note that the current process does not
  7. # count - ie, if Python.exe is hosting this script, you can still kill
  8. # another Python.exe (as long as there is only one other Python.exe)
  9.  
  10. # Really just a demo for the win32pdh(util) module, which allows you
  11. # to get all sorts of information about a running process and many
  12. # other aspects of your system.
  13.  
  14. import win32api, win32pdhutil, win32con, sys
  15.  
  16. def killProcName(procname):
  17.     # Change suggested by Dan Knierim, who found that this performed a
  18.     # "refresh", allowing us to kill processes created since this was run
  19.     # for the first time.
  20.     try:
  21.         win32pdhutil.GetPerformanceAttributes('Process','ID Process',procname)
  22.     except:
  23.         pass
  24.  
  25.     pids = win32pdhutil.FindPerformanceAttributesByName(procname)
  26.  
  27.     # If _my_ pid in there, remove it!
  28.     try:
  29.         pids.remove(win32api.GetCurrentProcessId())
  30.     except ValueError:
  31.         pass
  32.  
  33.     if len(pids)==0:
  34.         result = "Can't find %s" % procname
  35.     elif len(pids)>1:
  36.         result = "Found too many %s's - pids=`%s`" % (procname,pids)
  37.     else:
  38.         handle = win32api.OpenProcess(win32con.PROCESS_TERMINATE, 0,pids[0])
  39.         win32api.TerminateProcess(handle,0)
  40.         win32api.CloseHandle(handle)
  41.         result = ""
  42.  
  43.     return result
  44.  
  45. if __name__ == '__main__':
  46.     if len(sys.argv)>1:
  47.         for procname in sys.argv[1:]:
  48.             result = killProcName(procname)
  49.             if result:
  50.                 print result
  51.                 print "Dumping all processes..."
  52.                 win32pdhutil.ShowAllProcesses()
  53.             else:
  54.                 print "Killed %s" % procname
  55.     else:
  56.         print "Usage: killProcName.py procname ..."
  57.