2012-10-18 71 views
5

我想從在apache2/WSGI Python中運行的Django應用程序中fork()和exec()一個新的python腳本進程。新的python進程被守護進程,所以它不保存任何與apache2的關聯,但我知道HTTP端口仍然是打開的。新進程殺死apache2,但結果是新的python進程現在保持打開端口80和443,我不想這樣做。在Django中分叉後關閉TCP端口80和443

如何從新的python進程中關閉端口80和443?有沒有辦法獲得對套接字句柄描述符的訪問,以便它們可以關閉?

回答

2

如果使用subprocess模塊執行腳本時,close_fds參數傳遞給Popen構造可能會做你想要什麼:

如果close_fds是真實的,所有的文件描述符,除了0,1和2在子進程執行之前關閉。

假設他們不乾脆關門,前三個文件描述符傳統stdinstdoutstderr,所以在Django應用程序監聽套接字將是那些在子進程關閉之一。

+0

subprocess.Popen(myProcArgs,close_fds = True,...)完美地工作。非常感謝。 – caelumvox