我需要我的 python (2.7) 程序启动一个子进程,并在子进程运行时继续处理。所以我不希望主程序等待子进程终止。
这显然是通过返回类对象的 Popen 实现的。
忽略 Popen 的返回值是否安全?
垃圾收集器是否删除了 popen 对象?子进程终止后对象是否垃圾回收?
我无法用 Python 文档来回答这些问题。
请注意,由于我无法控制的约束,我使用的是 python 2.7。
最佳答案
在类 Unix 系统上,未能在子节点上使用 wait()
会创建僵尸。这是一个问题,因为您正在污染并最终耗尽您的流程表。见 https://en.wikipedia.org/wiki/Wait_(system_call)
如果您想在程序完成时终止子进程,请执行此操作。这正是您需要保存 Popen()
的结果的原因。
child = Popen(['sleep', '1234567890'])
# ... code happens ...
child.kill()
child.wait()
重申一下,Popen()
返回的 Python 对象当然会随着 Python 消失而消失;问题是您还需要清理它代表的实际操作系统进程。
关于python - 忽略 Popen 的返回值是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64440576/