Ich versuche, einen Server zu stoppen, der ein Subprozess ist, wenn der Elternprozess von einem Cntrl-D (EOF auf Stdin) getötet wird. Ich habe viele Möglichkeiten versucht, einschließlich stdin im Subprozess zu lesen, aber das blockiert alle Tastatureingaben. Gibt es eine Möglichkeit, den Unterprozess zu beenden, wenn der Elternprozess ein EOF findet.Unterprozess auf Steuerelement-D beenden?
Erstellen eines Teilprozesses in Python über subprocess.Popen
Polling für EOF in subprocess durch das:
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()
Lassen Sie den übergeordneten Prozess Es signalisiert dem Kind, dass es Zeit ist, zu gehen. –
@thatotherguy das nicht funktioniert, wenn ein Benutzer zwangsweise den übergeordneten Prozess mit einem Steuerelement-d beendet, gibt es keine Signalausbreitung dort. –
Ctrl-D ist kein Zwangsausstieg. In Ihrem Snippet scheinen Sie explizit codiert zu haben, um eof zu erkennen und zu beenden. Sagen Sie dem Kind einfach, dass es als Teil davon, z. mit Pythons Thread-Ereignissen. –