调用Popen然后杀死()时的僵尸进程

时间:2017-02-08 01:56:27

标签: python subprocess

单元测试有点问题;在设置中我检查进程是否正在运行,如果没有,我使用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()

1 个答案:

答案 0 :(得分:2)

找到了罪魁祸首:当我打电话给Popen时我也叫shell = True。这将与进程建立联系,因此它将一直挂起,直到shell被杀死。

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