0
我試圖停止一個服務器,當父進程被一個cntrl-D(stdin上的EOF)殺死時,這是一個子進程。我嘗試了很多方法,包括讀取子進程中的stdin,但會阻止所有鍵盤輸入。當父進程遇到EOF時,是否有辦法終止子進程?在控制-D上退出子進程?
這個創建通過subprocess.Popen
輪詢的子EOF Python中的子:
self.t = threading.Thread(target=self.server.serve_forever)
self.t.start()
# quit on cntrl-d (EOF)
while True:
if len(sys.stdin.readline()) == 0:
self.stop()
def stop(self):
manager.save()
# shutdown bottle
self.server.shutdown()
# close socket
self.server.server_close()
self.t.join()
sys.exit()
讓父母處理給孩子一個信號,表示該退出了。 –
@thatotherguy當用戶用控件-d強制退出父進程時不起作用,那裏沒有信號傳播。 –
Ctrl-D不是強制退出。在你的代碼片段中,你似乎已經明確地編碼以檢測eof並因爲而退出。只要發信號通知小孩,它應該作爲其中的一部分退出。與Python的線程事件。 –