gpt4 book ai didi

python - 从 python 中杀死一个子进程,包括它的子进程

转载 作者:IT老高 更新时间:2023-10-28 20:52:54 25 4
gpt4 key购买 nike

我正在使用 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 和它生成的任何其他进程?

最佳答案

处理一般问题:

p=subprocess.Popen(your_command, preexec_fn=os.setsid)
os.killpg(os.getpgid(p.pid), signal.SIGTERM)

setsid 将在新 session 中运行程序,从而为它及其子进程分配一个新进程组。调用 os.killpg 因此也不会关闭你自己的 python 进程。

关于python - 从 python 中杀死一个子进程,包括它的子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2638909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com