Мы используем Robot Framework для автоматизации тестирования, и наш тестовый код jython порождает подпроцесс java с использованием subprocess.Popen ():
cmd = "java -jar program.jar"
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
process.wait()
В коде Java используется соединение JDBC с базой данных Oracle, и одну и ту же программу необходимо выполнить несколько раз подряд.
Наша проблема в том, что после завершения работы java-программы соединение с базой данных не закрывается - и после нескольких выполнений тесты начинают давать сбои, поскольку Oracle не принимает больше соединений.
netstat показывает, что устаревшие TCP-соединения с Oracle принадлежат PID jython (= родительский процесс).
Почему соединения не закрываются при выходе из java-программы (= подпроцесс)?