Exemple 1 de fork (compartició del CES)

Carregueu els programes A (amb A.py) i B (amb B.py). Feu que A i B siguin executables i la variable d’entorn PATH tingui en compte el vostre directori de treball.

El programa A després de presentar-se, crea un clon de sí mateix. El clon desapareix per que es carregui el programa B. Com que els clons hereten el recursos de qui els genera, ambdós programes, A i B, comparteixen el mateix canal estàndard de sortida. Després de crear el clon, escriu pel canal estàndard de sortida cinc línies amb el caràcter A a l’inici de la línia, acomiadant-se tot seguit, esperant que acabi el fill entreforcat.

El programa B després de presentar-se, genera cinc línies amb el caràcter B a l’inici de la línia, abans d’acomiadar-se

El programa A crea un clon després de presentar-se, genera cinc línies amb el

Programa A:

import os
import time

def A():
    print('Hola, soc el programa A')
    noupid = os.fork()
    if noupid == 0:
        print("Hola, soc fill d'A. Vaig a transformar-me en B")
        os.execl('./B', './B')  #Substituïm per programa B 
        os._exit(1)  # Aquí només s'arriba si fracassa execl.
    else:
        for _ in range(5):
            print('A')
            time.sleep(0.1)
        print("Això és tot per part d'A")
        pid, retorn = os.wait()
        print('Ha acabat ', pid)
        os._exit(0)      # Sortida amb èxit
        
if __name__ == "__main__":
   A()

Programa B:

import os
import time

def B():
    print('Hola, soc el programa B')
    for _ in range(5):
        print('B')
        time.sleep(0.1)
    print("Això és tot per part de B")
    os._exit(0)
        
if __name__ == "__main__":
   B()

Per exemple:

$ A
Hola, soc el programa A
A
Hola, soc fill d'A. Vaig a transformar-me en B
Hola, soc el programa B
B
A
B
A
B
A
B
A
B
Això és tot per part d'A
Això és tot per part de B
Ha acabat  1387314