我正在尝试停止服务器,当父进程被cntrl-D(stdin上的EOF)杀死时,这是一个子进程。我尝试了很多方法,包括在子进程中读取stdin但阻止所有键盘输入。有没有办法在父进程遇到EOF时终止子进程。
通过subprocess.Popen
通过以下方式在子进程中轮询EOF:
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()
答案 0 :(得分:0)
使用@thatotherguy建议使用os.getppid(),这是一个新的工作解决方案,用于在父进程孤立时终止子进程(即,当父进程出现控制-D时)并且在没有发信号通知孩子的情况下关闭)
self.t = threading.Thread(target=self.server.serve_forever)
self.t.start()
# quit on cntrl-d (EOF)
if os.getppid() != 1:
while True:
if os.getppid() == 1:
self.stop()
else:
time.sleep(1)