web-dev-qa-db-ja.com

Python内からWindows上のプロセスを強制終了することは可能ですか?

Python 2.6を使用しています。特定のプロセスの複数のインスタンスが開かれることがあり、そのプロセス自体にいくつかの問題が発生します。そのプロセスの複数のインスタンスがあることをプログラムで検出し、それらを強制終了できるようにしたいと思います。

たとえば、場合によっては、make.exeのインスタンスが50個開いていることがあります。 20個のインスタンスが開いていることを通知し、それらをすべて強制終了できるようにしたいと考えています。これはどのように達成されますか?

37
cupof

taskkill とPython os.system()

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

注:タスクキルパスを完全に修飾する必要がある場合があることに注意してください。 Linuxボックスを使用しているため、テストできません...

47
Nix

はい、できます

import os
os.system("taskkill /f /im  Your_Process_Name.exe")
  1. / f:プロセスを強制的に終了することを指定します。
  2. / im(ImageName):終了するプロセスのイメージ名を指定します。
  3. TaskKillに関する詳細情報
12
Avinash Jeeva

Nice cross-platform python utility psutil は、psutilでリストできるプロセスで kill() ルーチンを公開します。 process_iter()。

他のスレッドにはすでに例があります: https://stackoverflow.com/a/4230226/4571444

4
Pshemy108

Win32 APIのTerminateProcessを使用して、プロセスを強制終了できます。次の例を参照してください。 http://code.activestate.com/recipes/347462-terminating-a-subprocess-on-windows/

プロセスハンドルを指定する必要があります。プロセスがコードから開始される場合、プロセスハンドルはCreateProcessまたはpopenによって返されます。

プロセスが他の何かによって開始された場合、このハンドルを取得する必要があります EnumProcess または [〜#〜] wmi [〜#〜] を使用して取得できます。

3
luc

これについては、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")
2
Giovanni