sto usando il modulo sottoprocesso su Python 2.5 per deporre le uova un programma Java (il server di selenio, per essere precisi) come segue:Uccidere un sottoprocesso compresi i suoi figli in pitone
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)
Questo processo si suppone vengono uccisi una volta terminati i test automatici. Sto utilizzando os.kill
per fare questo:
os.killpg(selenium_server_process.pid, signal.SIGTERM)
selenium_server_process.wait()
Questo non funziona. Il motivo è che il sottoprocesso della shell genera un altro processo per java, e il pid di quel processo è sconosciuto al mio codice python. Ho provato ad uccidere il gruppo di processi con os.killpg
, ma questo uccide anche il processo Python che esegue questo codice in primo luogo. Impostare shell su false, evitando così java di funzionare all'interno di un ambiente shell, è anche fuori questione, a causa di altri motivi.
Come posso eliminare la shell e qualsiasi altro processo generato da esso?
Questo è solo unix, giusto? – Macke
related: [Come terminare un sottoprocesso python lanciato con shell = True] (http://stackoverflow.com/q/4789837/4279) – jfs