2011-06-08 79 views
26

我正在使用Python 2.6。有时会出现某个过程的几个实例打开,并且该过程本身会导致一些问题。我希望能够以编程方式检测该进程有多个实例并杀死它们。是否有可能从Python内部杀死Windows上的进程?

例如,在某些情况下可能有50个make.exe实例处于打开状态。我想知道有20个实例是打开的,并且全部杀死它们。这是如何完成的?

回答

36

,我觉得你可以只使用taskkill和Python的os.system()

import os 
os.system("taskkill /im make.exe") 

注:我只想请注意,您可能需要完全限定的taskkill路径。我正在使用Linux盒子,所以我无法测试...

+4

你也可以使用'os.popen(“任务列表”)readlines方法()'来获取进程列表当前正在执行的,因而可以指望您正在查找的进程的实例数量会显示在列表中,并用它来确定是否要杀死所有进程。 'subprocess.Popen()'的用法稍微复杂一点,但是从Python 2.6开始已经废弃了'os.popen()',所以要记住这一点。请参阅http://stackoverflow.com/questions/3215262/monitor-process-in-python/3215404#3215404了解如何利用'subprocess.Popen()'完成相同类型的任务。 – JAB 2011-06-08 19:04:31

+0

请注意,如果有一个'str'函数来计算大字符串中子字符串的出现,'os.popen('tasklist')。read()'可以用来将整个列表作为一个字符串。 – JAB 2011-06-08 19:13:02

+0

'subprocess。check_output('tasklist')'会在错误处理方面做得更好 – Eric 2017-09-06 23:12:05

3

您可以使用win32 api的TerminateProcess杀死一个进程。请看下面的例子:http://code.activestate.com/recipes/347462-terminating-a-subprocess-on-windows/

你需要给它一个进程句柄。如果进程是从您的代码开始的,则进程句柄由CreateProcess或popen返回。

如果这个过程是由别的东西启动的,你需要得到这个句柄,你可以使用EnumProcessWMI来检索它。

+0

哦,http://timgolden.me.uk/python/wmi/index.html看起来不错。 – JAB 2011-06-08 19:15:51

+1

不能使用TerminateProcess不幸中止系统进程 – 2012-07-11 22:04:38

2

这样吧,我用的ActiveState的Python 2.7进行了测试:

import sys, traceback, os 

def pkill (process_name): 
    try: 
     killed = os.system('tskill ' + process_name) 
    except Exception, e: 
     killed = 0 
    return killed 

调用它:

pkill("program_name") 
3

是的,你可以这样做

import os 
os.system("taskkill /f /im Your_Process_Name.exe") 
  1. /f:指定进程被强制终止。
  2. /im(ImageName):指定进程的映像名称为 已终止。
  3. For more info regarding TaskKill
+0

刚刚使用os.system(“taskkill/f/im BitTorrent.exe”)进行测试,它工作得很好!在pycharm控制台上获得输出SUCCESS:PID 6856的进程“BitTorrent.exe”已终止。谢谢! – LetzerWille 2017-02-14 13:44:16