Heim > Artikel > Backend-Entwicklung > Analyse des von der Funktion fork() in Python generierten Unterprozesses
Das Betriebssystemmodul von Python verfügt über die Funktion fork() zum Generieren von untergeordneten Prozessen. Die generierten untergeordneten Prozesse sind Spiegelbilder des übergeordneten Prozesses, verfügen jedoch über eigene Adressräume. Der untergeordnete Prozess kopiert eine Kopie des Speichers des übergeordneten Prozesses , zwei Die Ausführung zwischen Prozessen ist unabhängig voneinander, und die Ausführungsreihenfolge kann unsicher, zufällig und unvorhersehbar sein, ähnlich der Ausführungsreihenfolge von Multithreads.
import os def child(): print 'A new child:', os.getpid() print 'Parent id is:', os.getppid() os._exit(0) def parent(): while True: newpid=os.fork() print newpid if newpid==0: child() else: pids=(os.getpid(),newpid) print "parent:%d,child:%d"%pids print "parent parent:",os.getppid() if raw_input()=='q': break parent()
Nachdem wir das OS-Modul geladen haben, generiert die Funktion fork() in unserer übergeordneten Funktion einen untergeordneten Prozess. Es gibt zwei Rückgabewerte newpid, einer ist 0, um den untergeordneten Prozess darzustellen, und der other ist Eine Ganzzahl größer als 0 wird zur Darstellung des übergeordneten Prozesses verwendet. Diese Konstante ist die PID des untergeordneten Prozesses. Wir können die beiden Rückgabewerte durch die print-Anweisung deutlich erkennen. Wenn der Rückgabewert von fork() ein negativer Wert ist, bedeutet dies, dass der untergeordnete Prozess nicht erfolgreich generiert wurde (diese Situation wird in diesem einfachen Programm nicht berücksichtigt). Wenn newpid == 0, bedeutet dies, dass wir den untergeordneten Prozess eingegeben haben, dh die Funktion child (). Im untergeordneten Prozess geben wir unsere eigene ID und die ID des übergeordneten Prozesses aus. Wenn die else-Anweisung eingegeben wird, bedeutet dies, dass newpid> 0 ist und wir den übergeordneten Prozess eingeben. Im übergeordneten Prozess erhält os.getpid() seine eigene ID. Der Rückgabewert von fork(), newpid, stellt die ID dar Gleichzeitig geben wir die ID des übergeordneten Prozesses aus. Durch Experimente können wir feststellen, dass die Ausführungsreihenfolge von untergeordneten und übergeordneten Prozessen ungewiss ist der Planungsalgorithmus des Betriebssystems.