Уничтожение подпроцесса, включая его потомков из python [дубликата]

На этот вопрос уже есть ответ:

Как завершить подпроцесс python, запущенный с shell = True 10 ответов

Я использую модуль подпроцесса в Python 2.5 для запуска Java-программы (точнее, сервера selenium) следующим образом:

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)

Предполагается, что этот процесс завершится после завершения автоматических тестов. Я используюos.kill сделать это

os.killpg(selenium_server_process.pid, signal.SIGTERM)
selenium_server_process.wait()

Это не работает. Причина в том, что подпроцесс оболочки порождает другой процесс для Java, а pid этого процесса неизвестен моему коду Python. Я пытался убить группу процессов с помощьюos.killpg, но это убивает также процесс python, который запускает этот код в первую очередь. Установка оболочки в false, что позволяет избежать запуска Java внутри среды оболочки, также не может быть рассмотрено по другим причинам.

Как я могу уничтожить оболочку и любые другие процессы, сгенерированные ею?

Ответы на вопрос(2)

Ваш ответ на вопрос