La chiamata waitpid()

Abbiamo gia visto in precedenza la chiamata wait(), come permetta ad un padre di attendere la terminazione dei suoi figli, in questo caso tutti che siano uno o più. Esiste anche una variante per cui si può forzare il padre ad attendere solo un determinato figlio di cui è noto il PID.

Vediamo un esempio in cui il padre attende la fine del processo più lungo.

import os
import time

#creiamo il solito figlio
pid1 = os.fork()

if pid1 is 0:
    print("Sono il primo figlio " + str(os.getpid()))
    time.sleep(4)
    print ("zzzzz.....")
    os._exit(1);
else:
    #sono il padre, riforko
    pid2 = os.fork()
    if pid2 == 0:
      print("Sono il secondo figlio " + str(os.getpid()))
      time.sleep(1)
      os._exit(2);
    else:
      print ("Sono il padre "+  str(os.getpid()) +" in attesa del figlio più lento" )
      status = os.waitpid(pid1,0)
      print("Il mio figlio uscito è: "+ str(status[0]) + ", lo seguo.")

 


Stampa