que estoy usando el módulo de subproceso en pitón 2,5 a desovar un programa java (el servidor de selenio, para ser más precisos) como sigue:Killing un subproceso incluyendo sus niños de pitón
import os
import subprocess
display = 0
log_file_path = "/tmp/selenium_log.txt"
selenium_port = 4455
selenium_folder_path = "/wherever/selenium/lies"
env = os.environ
env["DISPLAY"] = ":%d.0" % display
command = ["java",
"-server",
"-jar",
'selenium-server.jar',
"-port %d" % selenium_port]
log = open(log_file_path, 'a')
comm = ' '.join(command)
selenium_server_process = subprocess.Popen(comm,
cwd=selenium_folder_path,
stdout=log,
stderr=log,
env=env,
shell=True)
Este proceso se supone que es ser asesinado una vez que las pruebas automatizadas hayan finalizado. Estoy usando os.kill
para hacer esto:
os.killpg(selenium_server_process.pid, signal.SIGTERM)
selenium_server_process.wait()
Esto no funciona. La razón es que el subproceso shell genera otro proceso para java, y el pid de ese proceso es desconocido para mi código python. Intenté eliminar el grupo de procesos con os.killpg
, pero eso también acaba con el proceso de python que ejecuta este código. Establecer shell en falso, evitando así que java se ejecute dentro de un entorno de shell, también está fuera de cuestión, debido a otras razones.
¿Cómo puedo matar el shell y cualquier otro proceso generado por él?
Esto es solo unix, ¿verdad? – Macke
relacionado: [Cómo finalizar un subproceso de python iniciado con shell = True] (http://stackoverflow.com/q/4789837/4279) – jfs