gpt4 book ai didi

java - 当使用Python的subprocess.Popen()退出启动java程序时,为什么子进程打开的数据库连接没有关闭?

转载 作者:行者123 更新时间:2023-12-02 00:50:22 28 4
gpt4 key购买 nike

我们使用 Robot Framework 进行测试自动化,并且我们的 jython 测试代码使用 subprocess.Popen() 生成一个 java 子进程:

    cmd = "java -jar program.jar"
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
process.wait()

Java代码利用JDBC连接Oracle数据库,相同的程序需要连续执行多次。

我们的问题是,java 程序退出后,与 Oracle 的数据库连接并未关闭 - 并且在多次执行后,测试开始失败,因为 Oracle 不会接受更多连接。

netstat 显示,与 Oracle 的过时 TCP 连接归 jython 的 PID(= 父进程)所有。

为什么当java程序(=子进程)退出时连接没有关闭?

最佳答案

我不确定,但有可能因为您使用的是 Jython,所以解释器被赋予了连接的所有权(因此它们会一直存在,直到该进程终止)。您是否尝试过在 process.wait() 之后使用 process.terminate()

关于java - 当使用Python的subprocess.Popen()退出启动java程序时,为什么子进程打开的数据库连接没有关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3477440/

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