Python 调用Popen然后Kill()时的僵尸进程

Python 调用Popen然后Kill()时的僵尸进程,python,subprocess,Python,Subprocess,我对单元测试有点问题;在设置中,我检查一个进程是否正在运行,如果没有,我使用Popen来运行它 在teardown()中,我调用myprocess.kill(),因此每次测试都会得到一个干净的状态 这只是第一次很好地工作;因为当我在那个进程上调用kill命令时;它最终处于僵尸状态(Z+);这意味着为了摆脱它,我还需要杀死单元测试类,因为Popen起源于测试用例的设置阶段 有办法解决这个问题吗?我使用pytest调用测试,将单元测试python脚本作为参数传递 class Mytest(unitt

我对单元测试有点问题;在设置中,我检查一个进程是否正在运行,如果没有,我使用Popen来运行它

teardown()
中,我调用
myprocess.kill()
,因此每次测试都会得到一个干净的状态

这只是第一次很好地工作;因为当我在那个进程上调用kill命令时;它最终处于僵尸状态(Z+);这意味着为了摆脱它,我还需要杀死单元测试类,因为Popen起源于测试用例的设置阶段

有办法解决这个问题吗?我使用pytest调用测试,将单元测试python脚本作为参数传递

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()

找到罪魁祸首:当我调用Popen时,我也调用shell=True。这将创建一个与进程的键,因此它将挂起,直到外壳也被杀死


要解决此问题,请从调用中删除
shell=True
,它就可以正常工作。

找到罪魁祸首:当我调用Popen时,我也调用shell=True。这将创建一个与进程的键,因此它将挂起,直到外壳也被杀死

要解决此问题,请从调用中删除
shell=True
,这样就可以正常工作