繁体   English   中英

依次调用Popen和Kill()的僵尸进程

[英]Zombie process when calling Popen and then Kill()

我对单元测试有一些疑问; 在安装程序中的哪个位置检查进程是否正在运行,如果没有运行,则使用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 ,它可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM