簡體   English   中英

停止python子進程,留下死掉的“ python”進程

[英]Stop python sub-process leaving behind dead 'python' process

我正在開發一個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)

然后,即使python程序已經完成“ exit(0)”,“ 783”也會一直掛到父進程完成為止。

完成后,是否有任何方法可以實際終止/擺脫此過程? 我認為如果長時間啟動數百個甚至數千個短生命周期的進程可能會成為問題。

我已經嘗試了subprocess(),Popen(如圖所示),還使用了fork()然后是execl(),但是它們總是以相同的方式結束。

您應該在某個時候致電child.wait。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM