views:

1290

answers:

2

I am using the subprocess package in Python to run a subprocess, which I later need to kill. However, the documentation of the subprocess package states that the terminate() function is only available from 2.6

We are running Linux with 2.5 and for backwards compatibility reasons I cannot upgrade to 2.6, what is the alternative? I am guessing that these functions are convenience methods for something.

+16  A: 

You call os.kill on the process pid.

os.kill(process.pid, signal.SIGKILL)

You're OK because you're on on Linux. Windows users are out of luck.

Gareth Simpson
os.kill(p.pid, signal.SIGTERM) to be more precise
Cristian Ciupitu
Ups: Garet Simpson was faster!
Blauohr
+16  A: 

To complete @Gareth's answer, on Windows you do:

import ctypes
PROCESS_TERMINATE = 1
handle = ctypes.windll.kernel32.OpenProcess(PROCESS_TERMINATE, False, theprocess.pid)
ctypes.windll.kernel32.TerminateProcess(handle, -1)
ctypes.windll.kernel32.CloseHandle(handle)

not quite as elegant as os.kill(theprocess.pid, 9), but it does work;-)

Alex Martelli
thanks for the win32 code !
Blauohr
excellent update
mtasic