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

标签 python python-2.7 subprocess

我需要我的 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/

相关文章:

python - Apache Beam/Dataflow 作业中是否可以有非并行步骤?

Python 将字符串写入内存并使用其他 Python 程序读取内存

python - 由于缺乏传递引用,如何在 python 2 中保持干燥

python - Neo4j 导入 csv,并在列中拆分值

python - 如何在 Kivy ScrollView 中滚动 GridLayout?

python - 如何将分位数应用于 pandas groupby 对象?

python - 浮点十六进制字符串变回 float

python - 如何在 Python 中运行另一个脚本而不等待它完成?

python - Python 系统调用失败