En Python 2.5, ¿cómo mato un subproceso?

Estoy usando el paquete de subproceso en Python para ejecutar un subproceso, que luego debo eliminar. Sin embargo, la documentación del paquete de subproceso indica que la función terminate () solo está disponible desde 2.6

Estamos ejecutando Linux con 2.5 y por razones de compatibilidad con versiones anteriores no puedo actualizar a 2.6, ¿cuál es la alternativa? Supongo que estas funciones son métodos de conveniencia para algo.

Llamas a os.kill en el proceso pid.

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

Estás bien porque estás en Linux. Los usuarios de Windows están fuera de suerte.

Para completar la respuesta de @Gareth, en Windows haces:

 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) 

no es tan elegante como os.kill(theprocess.pid, 9) , pero funciona 😉

Para completar las respuestas de @Gareth y @Alex, si no quiere molestarse con el sistema de base, puede usar psutil .

psutil es un módulo que proporciona una interfaz para recuperar información sobre los procesos en ejecución y la utilización del sistema (CPU, memoria) de forma portátil mediante Python, implementando muchas funcionalidades ofrecidas por las herramientas de la línea de comandos como ps, top, kill y el administrador de tareas de Windows.

Actualmente es compatible con Linux, OS X, FreeBSD y Windows con versiones de Python de 2.4 a 3.1 mediante el uso de una base de código única.

Eso es una solución completa de copia y pase:

 def terminate_process(pid): # all this shit is because we are stuck with Python 2.5 and # we cannot use Popen.terminate() if sys.platform == 'win32': import ctypes PROCESS_TERMINATE = 1 handle = ctypes.windll.kernel32.OpenProcess(PROCESS_TERMINATE, False, pid) ctypes.windll.kernel32.TerminateProcess(handle, -1) ctypes.windll.kernel32.CloseHandle(handle) else: os.kill(pid, signal.SIGKILL) 

Aceptando informes de errores como comentarios;)