退出 control-D 上的子进程?
Exiting subprocess on control-D?
我试图在父进程被 cntrl-D(标准输入上的 EOF)杀死时停止作为子进程的服务器。我尝试了很多方法,包括在子进程中读取标准输入,但这会阻止所有键盘输入。有没有办法在父进程遇到EOF的时候杀掉子进程
通过 subprocess.Popen
在 python 中创建子进程
通过以下方式轮询子进程中的 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()
根据@thatotherguy 关于使用 os.getppid() 的建议,这是在子进程被父进程孤立时结束子进程的新工作解决方案(即当 control-D 出现在parent 并且它在不向 child 发出信号的情况下关闭)
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)
我试图在父进程被 cntrl-D(标准输入上的 EOF)杀死时停止作为子进程的服务器。我尝试了很多方法,包括在子进程中读取标准输入,但这会阻止所有键盘输入。有没有办法在父进程遇到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()
根据@thatotherguy 关于使用 os.getppid() 的建议,这是在子进程被父进程孤立时结束子进程的新工作解决方案(即当 control-D 出现在parent 并且它在不向 child 发出信号的情况下关闭)
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)