Is it possible to kill a process on Windows from within Python?
Asked Answered
C

6

56

I'm using Python 2.6. Sometimes there become several instances of a certain process open, and that process causes some problems in itself. I want to be able to programatically detect that there are multiple instances of that process and to kill them.

For example, maybe in some cases there are 50 instances of make.exe open. I want to be able to tell that there are 20 instances open, and to kill them all. How is this accomplished?

Chorister answered 8/6, 2011 at 12:42 Comment(1)
The answers below will work, but you could try using psutil: psutil.readthedocs.io/en/latest/#kill-process-treeFumy
S
71

I would think you could just use taskkill and the Python os.system()

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

Note: I would just note you might have to fully qualify the taskkill path. I am using a Linux box so I can't test...

Saguaro answered 8/6, 2011 at 12:50 Comment(6)
And you can use os.popen('tasklist').readlines() to get a list of the processes currently executing, and thus can count the number of instances the process you're looking for appears in the list and use that to determine if it's time to kill all of them. Usage of subprocess.Popen() is a bit more complicated, but os.popen() was deprecated starting with Python 2.6, so there's that to keep in mind. See https://mcmap.net/q/1329338/-monitor-process-in-python/… for how to utilize subprocess.Popen() for this same sort of task.Monoatomic
Note that os.popen('tasklist').read() could be used to get the entire list as one string, if there's a str function to count the occurrences of a substring within a larger string.Monoatomic
subprocess.check_output('tasklist') will do much better at error handlingRolfrolfe
On windows 10 it needs a /F flag to force terminate.Axiom
os.popen is still live and kicking in 3.9, and don't give any deprecation warnings, fyiPresbyterian
Is there any way to suppress the output?Pastorate
L
33

Yes,You can do it

import os
os.system("taskkill /f /im  Your_Process_Name.exe")
  1. /f : Specifies that process(es) be forcefully terminated.
  2. /im (ImageName ): Specifies the image name of the process to be terminated.
  3. For more info regarding TaskKill
Layton answered 20/1, 2017 at 2:37 Comment(0)
C
10

There is a nice cross-platform python utility psutil that exposes a kill() routine on a processes that can be listed with psutil.process_iter().

There is already an example in the other thread: https://mcmap.net/q/172454/-kill-process-by-name

Cymry answered 1/6, 2017 at 8:41 Comment(0)
G
4

I think the code is like this will work:

import os

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

terminate('chrome.exe')
Guaiacum answered 12/1, 2021 at 10:10 Comment(0)
A
3

You can use the TerminateProcess of the win32 api to kill a process. See the following example : http://code.activestate.com/recipes/347462-terminating-a-subprocess-on-windows/

You need to give it a process handle. If the process is started from your code, the process handle is returned by the CreateProcess or popen.

If the process was started by something else, you need to get this handle you can use EnumProcess or WMI to retrieve it.

Accusatorial answered 8/6, 2011 at 13:21 Comment(1)
cannot kill system processes with TerminateProcess unfortunatelyDearman
T
3

How about this, I tested it with 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

call it with:

pkill("program_name")
Tiffaneytiffani answered 18/7, 2014 at 19:26 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.