In Python3 erstelle ich verzweigte untergeordnete Prozesse, die ich - ich denke - richtig beenden. Hier ist ein Code Beispiel:Wie zu vermeiden, dass Prozesse mit Python Fork?
import os
child_pid = os.fork()
if child_pid == 0:
print("I am in the child with PID "+str(os.getpid()))
# doing something
a = 1+1
print("Ending child with PID "+str(os.getpid()))
os._exit(0)
else:
#parent process
os.waitpid(-1, os.WNOHANG)
import time
for x in range(100):
time.sleep(1)
print("waiting...")
Jetzt, da das Kind Prozess beendet zu werden scheint, es kann immer noch als ‚nicht mehr existierender‘ Prozess gesehen werden (während des übergeordneten Prozess noch läuft). Wie man den beendeten Kindprozess wirklich los wird? Wie ändere ich den Code?
Durch verstorben meinst du es ist ein Zombie-Prozess? Ihr Elternteil muss auf das Kind warten, um seinen Status zu erhalten, dann wird es verschwinden. Siehe http://stackoverflow.com/questions/13870945/how-cani-i-prevent-a-child-process-to-not-become-a-zombie-if-parent-exits – pcarter
Ersetzen von 'os._exit (0) 'by' sys.exit (0) 'ändert nichts an der Situation. Und das Hinzufügen eines Befehls "os.waitpid (-1, os.WNOHANG)" im übergeordneten Prozess ändert die Situation nicht. Ein "verstorbener" Prozess existiert noch! – Alex
@pcarter: Siehe meinen Befehl, Ihr Vorschlag scheint nicht zu funktionieren ... – Alex