我正在使用Python 2.5的subprocess模块来生成一个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()
这不起作用。原因是shell子进程会为Java生成另一个进程,而该进程的pid对我的Python代码来说是未知的。我尝试使用os.killpg
杀死进程组,但这也会杀死运行此代码的Python进程。将shell设置为false以避免在shell环境中运行Java也不可行,因为有其他原因。
如何终止shell和由其生成的任何其他进程?