Ich habe ein bisschen ein Problem mit einem Komponententest; wo in der Einrichtung überprüfe ich, ob ein Prozess läuft, und wenn es nicht ist, verwende ich Popen, um es auszuführen.Zombie-Prozess beim Aufrufen von Popen und dann Kill()
In der teardown()
Ich rufe myprocess.kill()
, so bekomme ich einen sauberen Zustand für jeden Test.
Dies funktioniert nur beim ersten Mal; weil, wenn ich den Kill-Befehl für diesen Prozess anrufe; es endet im Zombie-Zustand (Z +); und das bedeutet, dass, um es loszuwerden, ich auch die Unit-Test-Klasse töten muss, da das Popen in der Setup-Phase des Testfalls entstanden ist.
Gibt es eine Möglichkeit, dies zu umgehen? Ich rufe den Test mit pytest auf und übergebe das Unit-Test-Python-Skript als Parameter.
class Mytest(unittest.TestCase)
running_process = ""
def setUp(self):
command = "~/myprocess"
self.running_process = Popen(command, shell=True, stdout=PIPE, stderr=STDOUT)
def test_tryprocess(self):
#do something
def test_tryprocess_again(self):
# do something else
def tearDown(self):
self.running_process.kill()