【问题标题】:Is it possible to kill a process on Windows from within Python?是否可以从 Python 中杀死 Windows 上的进程?
【发布时间】:2011-09-10 20:28:48
【问题描述】:

我正在使用 Python 2.6。有时会打开某个进程的多个实例,并且该进程本身会导致一些问题。我希望能够以编程方式检测该进程的多个实例并终止它们。

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

【问题讨论】:

标签: python windows windows-xp


【解决方案1】:

我认为你可以只使用 taskkill 和 Python os.system()

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

注意:我只想指出您可能必须完全限定 taskkill 路径。我使用的是 Linux 机器,所以无法测试...

【讨论】:

  • 您可以使用os.popen('tasklist').readlines() 获取当前正在执行的进程的列表,从而可以计算您要查找的进程出现在列表中的实例数,并使用它来确定是否是时候杀死他们所有人了。 subprocess.Popen() 的用法有点复杂,但从 Python 2.6 开始,os.popen() 已被弃用,因此请记住这一点。请参阅 stackoverflow.com/questions/3215262/monitor-process-in-python/… 了解如何将 subprocess.Popen() 用于此类任务。
  • 请注意,os.popen('tasklist').read() 可用于将整个列表作为一个字符串获取,如果有一个 str 函数来计算较大字符串中子字符串的出现次数。
  • subprocess.check_output('tasklist') 在错误处理方面会做得更好
  • 在 Windows 10 上,它需要一个 /F 标志来强制终止。
  • os.popen 在 3.9 中仍然有效,并且不会给出任何弃用警告,仅供参考
【解决方案2】:

是的,你可以的

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

【讨论】:

  • 刚刚用 os.system ("taskkill /f /im BitTorrent.exe") 测试过,它工作得很好!在 pycharm 控制台上获得输出 SUCCESS:PID 为 6856 的进程“BitTorrent.exe”已终止。谢谢!
【解决方案3】:

有一个不错的跨平台 python 实用程序psutil,它在可以使用 psutil.process_iter() 列出的进程上公开了一个kill() 例程。

另一个帖子里已经有例子了:https://stackoverflow.com/a/4230226/4571444

【讨论】:

    【解决方案4】:

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

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

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

    【讨论】:

    • 很遗憾无法使用 TerminateProcess 杀死系统进程
    【解决方案5】:

    这个怎么样,我用 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")
    

    【讨论】:

      【解决方案6】:

      我认为这样的代码会起作用:

      import os
      
      def terminate(ProcessName):
          os.system('taskkill /IM "' + ProcessName + '" /F')
      
      terminate('chrome.exe')
      

      【讨论】:

      • 您是否注意到 subprocess 需要一个对象列表,而这里的字符串缺少正确的语法?甚至有一个没有结束引号的引号
      猜你喜欢
      • 2017-01-10
      • 2011-04-09
      • 1970-01-01
      • 1970-01-01
      • 2015-06-30
      • 1970-01-01
      • 2010-12-08
      • 2012-06-13
      • 2015-04-17
      相关资源
      最近更新 更多