Quelqu'un peut-il expliquer les systèmes d'exploitation suivants.fork() exemple pour moi?

[Code de Programmation Python 4e Édition par Mark Lutz]

"forks child processes until you type 'q'"
import os
def child():
    print('Hello from child', os.getpid())
    os._exit(0) # else goes back to parent loop

def parent():
    while True:
        newpid = os.fork()
        if newpid == 0:
            child()
        else:
            print('Hello from parent', os.getpid(), newpid)
        if input() == 'q': break

parent()

Ce que le code des sorties ran:

Hello from parent 2057 2062 
Hello from child 2062

Hello from parent 2057 2068 
Hello from child 2068

Hello from parent 2057 2069 
Hello from child 2069

Hello from parent 2057 2070 
Hello from child 2070 
q

Choses que je comprends:

  1. os.fork() est utilisé pour démarrer un autre processus en parallèle à l'actuel.
  2. os.fork() crée une copie de la précédente Python session et ouvre en parallèle.
  3. os.fork() renvoie l'id de la nouvelle procédure.

Des choses que je ne comprends pas:

  1. Comment se fait la valeur de os.getpid() est jamais modifiée lors de l'exécution du code?
  2. Pourquoi le child() fonction jamais appelé? Disons que la valeur de newpid != 0, alors le programme affichera print('Hello from parent', os.getpid(), newpid). Cependant, après cela, il imprime la ligne de l'enfant plutôt que de leur demander pour l'entrée comme c'est le cas après l'instruction if.
  3. Qu'est-ce que os._exit(0) faire?

Merci une tonne pour votre temps. 🙂

OriginalL'auteur Always Learning Forever | 2014-06-05