忽略Popen的返回值是否安全?

时间:2020-10-20 07:37:10

标签: python python-2.7 subprocess

我需要我的python(2.7)程序启动一个子进程并在子进程运行时继续其处理。因此,我不希望主程序等待子进程终止。

这显然是通过Popen返回一个类对象来实现的。

忽略Popen的返回值是否安全?

垃圾收集器是否删除popen对象?子进程终止后是否收集对象垃圾?

我无法用python文档回答这些问题。

请注意,由于我无法控制,因此我使用的是python 2.7。

1 个答案:

答案 0 :(得分:2)

在类似Unix的系统上,未对子级进行wait()会创建僵尸。这是一个问题,因为您正在污染并最终耗尽了进程表。参见https://en.wikipedia.org/wiki/Wait_(system_call)

如果您想在程序完成时终止子进程,请执行此操作。这就是为什么您需要保存Popen()中的结果的原因。

child = Popen(['sleep', '1234567890'])
# ... code happens ...
child.kill()
child.wait()

只需重申一下,Popen()返回的Python对象当然会在Python消失时消失。问题是您还需要清理它所代表的实际OS进程。