python BaseHTTPServer重啓失敗,提示端口被佔用

有一個BaseHTTPServer,名爲A,監聽端口12346;它有10個子進程,通過os.system("nohup xxxx &")啓動,也是BaseHTTPServer,名字分別爲B0~B9,分別監聽9000~9009。A將接收到的請求分發給B0~B9處理。

當重啓A時,會提示端口12346被佔用,佔用者是Bx。原因是A的socket fd被Bx所繼承了,A關閉後,Bx取得監聽權,端口被佔用,導致A無法重啓。

解決方法:使用subprocess.Popen('nohup xxx &',shell=True,close_fds=True),close_fds=True將子進程0,1,2以外的所有fd關閉。
在打開socket時,指定close-on-exec標誌也可以。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章