我需要我的python(2.7)程序启动一个子进程并在子进程运行时继续其处理。因此,我不希望主程序等待子进程终止。
这显然是通过Popen返回一个类对象来实现的。
忽略Popen的返回值是否安全?
垃圾收集器是否删除popen对象?子进程终止后是否收集对象垃圾?
我无法用python文档回答这些问题。
请注意,由于我无法控制,因此我使用的是python 2.7。
答案 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进程。