停止 python sub-process 留下死亡 'python' 进程
Stop python sub-process leaving behind dead 'python' process
我正在开发一个 python 程序,该程序必须 运行 一个(可能很大)数量的其他 python 程序(用于某些负载测试)。其中一些是 short-lived,而另一些则持续更长时间。我希望 short-lived 那些在完成后终止并消失,但每个人似乎都留下了一个死的“(Python)”过程,直到原始程序完成。
平台为 OSX、Python 2.7.6.
以下是显示问题的简单演示程序:
#!/usr/bin/env python
# Child Process: Started by parent...
import time
print "Hello from child!"
time.sleep(10)
print "Child finished."
exit(0)
和 parent 程序:
#!/usr/bin/env python
# Parent process:
import subprocess, time
print "Starting Child..."
child = subprocess.Popen( "./child.py" )
print "Parent Process... hanging around."
time.sleep(30)
exit(0)
I 运行 来自终端的 "parent" 程序带有“./parent.py”。这是输出(如预期):
Starting Child...
Parent Process... hanging around.
Hello from child!
Child finished.
最初 'ps' 命令显示如下:
'ps' 命令显示:
782 ttys002 0:00.03 python ./parent.py
783 ttys002 0:00.02 python ./child.py
这是有道理的...parent 已经启动了 child 进程。
10 秒后,child 按预期完成,然后 'ps' 显示:
782 ttys002 0:00.03 python ./parent.py
783 ttys002 0:00.00 (Python)
'783' 然后挂起直到 parent 进程完成,即使 python 程序已经完成 "exit(0)"。
是否有任何方法可以在完成后实际终止/摆脱此过程?我认为如果我在很长一段时间内启动数百甚至数千个 short-lived 进程,这可能会成为一个问题。
我尝试过使用 subprocess()、Popen(如图所示),还使用过 fork() 和 execl(),但它们总是以相同的行为结束。
你应该在某个时候打电话给 child.wait。
我正在开发一个 python 程序,该程序必须 运行 一个(可能很大)数量的其他 python 程序(用于某些负载测试)。其中一些是 short-lived,而另一些则持续更长时间。我希望 short-lived 那些在完成后终止并消失,但每个人似乎都留下了一个死的“(Python)”过程,直到原始程序完成。
平台为 OSX、Python 2.7.6.
以下是显示问题的简单演示程序:
#!/usr/bin/env python
# Child Process: Started by parent...
import time
print "Hello from child!"
time.sleep(10)
print "Child finished."
exit(0)
和 parent 程序:
#!/usr/bin/env python
# Parent process:
import subprocess, time
print "Starting Child..."
child = subprocess.Popen( "./child.py" )
print "Parent Process... hanging around."
time.sleep(30)
exit(0)
I 运行 来自终端的 "parent" 程序带有“./parent.py”。这是输出(如预期):
Starting Child...
Parent Process... hanging around.
Hello from child!
Child finished.
最初 'ps' 命令显示如下:
'ps' 命令显示:
782 ttys002 0:00.03 python ./parent.py
783 ttys002 0:00.02 python ./child.py
这是有道理的...parent 已经启动了 child 进程。
10 秒后,child 按预期完成,然后 'ps' 显示:
782 ttys002 0:00.03 python ./parent.py
783 ttys002 0:00.00 (Python)
'783' 然后挂起直到 parent 进程完成,即使 python 程序已经完成 "exit(0)"。
是否有任何方法可以在完成后实际终止/摆脱此过程?我认为如果我在很长一段时间内启动数百甚至数千个 short-lived 进程,这可能会成为一个问题。
我尝试过使用 subprocess()、Popen(如图所示),还使用过 fork() 和 execl(),但它们总是以相同的行为结束。
你应该在某个时候打电话给 child.wait。