停止python子进程,留下死'python'进程

时间:2015-01-18 21:03:05

标签: python subprocess popen

我正在开发一个python程序,它必须运行一个(可能很大)其他python程序(用于某些负载测试)。其中一些是短暂的,而另一些则持续更长时间。我希望那些短命的终结者在完成后终止并消失,但每个人似乎都会留下一个死的"(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)

父母计划:

#!/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)

我运行"父母"使用" ./ 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

这是有道理的......父母已经启动了子进程。

10秒钟后,孩子按预期完成,并且' ps'然后显示:

782 ttys002    0:00.03 python ./parent.py
783 ttys002    0:00.00 (Python)

' 783'然后挂起,直到父进程完成,即使python程序已经完成"退出(0)"。

有没有办法在它完成后实际终止/摆脱这个过程?如果我长时间启动数百甚至数千个短期流程,我认为这可能是一个问题。

我已经尝试过subprocess(),Popen(如图所示),并且还使用fork()然后使用execl(),但它们总是以相同的行为结束。

1 个答案:

答案 0 :(得分:2)

你应该在某个时候打电话给child.wait。