【发布时间】:2011-02-07 23:54:04
【问题描述】:
我正在使用 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 生成了另一个进程,而我的 python 代码不知道该进程的 pid。我尝试使用os.killpg 杀死进程组,但这也杀死了首先运行此代码的python 进程。由于其他原因,将 shell 设置为 false,从而避免 java 在 shell 环境中运行,也是不可能的。
如何杀死 shell 和它生成的任何其他进程?
【问题讨论】:
-
如果我只想杀死子进程怎么办?
标签: python unix subprocess