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