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

19
задан Chris Martin 22 March 2016 в 09:15
поделиться

1 ответ

Очевидное решение в этом случае - не задействовать оболочку :

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",
           str(selenium_port)]
log = open(log_file_path, 'a')
selenium_server_process = subprocess.Popen(command,
                                           cwd=selenium_folder_path,
                                           stdout=log,
                                           stderr=subprocess.STDOUT,
                                           env=env)

Это сделает процесс напрямую Java-процессом. Имейте в виду, что он все еще может порождать процессы, не входящие в группу процессов, поэтому os.killpg может не знать об их уничтожении.

Если у вас есть причина вызвать оболочку (в приведенном выше коде ее нет, и есть несколько вещей, которые вы не можете сделать без оболочки, но предположим, что вы это делаете), вам придется заставить оболочку передать вам pid процесс начался как-то. Сделать это непросто, а скорее ситуативно.

4
ответ дан 30 November 2019 в 03:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: