2012-06-13 10 views
6

Qual è la funzione corretta da chiamare per uscire dal processo figlio dopo os.fork()?Uscire dal processo figlio dopo os.fork()

La documentazione per os._exit()states:

Il metodo standard per uscire è sys.exit(n).

_exit() deve essere normalmente utilizzato nel processo figlio solo dopo fork().

Non indica se è accettabile terminare il processo figlio utilizzando sys.exit(). Quindi:

  1. E '?
  2. Esistono potenziali effetti collaterali?

risposta

8

The unix way è che se sei un bambino di un fork quindi si chiama _exit. La differenza principale tra exit e _exit è che exit riordina più - chiede le atexit gestori, vampate stdio ecc, mentre _exit fa la minima quantità di roba in userspace, solo per il kernel di chiudere tutti i suoi file, ecc

Questo traduce piuttosto direttamente nel mondo Python con sys.exit facendo ciò che fa exit e facendo più dell'interruzione dell'interprete python, dove os._exit fa il minimo possibile.

Se sei un figlio di fork e si chiama exit piuttosto che _exit allora si può finire per chiamare prima funzioni di uscita che il genitore chiamerà di nuovo quando esce causando un comportamento indefinito.

1

parte della documentazione sulla os._exit(n) non ha citato è

uscire dal processo con lo status di n, senza chiamare prima funzioni di pulizia, vampate di calore buffer di stdio, ecc

Quindi, come Sto leggendo questo, dovresti usare os._exit() se condividi i gestori di file (in modo che siano chiusi() da un altro processo e tu ti occupi di svuotare i buffer da solo (se è importante nel tuo caso). Senza condiviso risorse (come in "file") - non importa.

Quindi, se i processi figlio sono solo di calcolo e vengono alimentati dati non elaborati (non gestori di risorse), è sicuro utilizzare exit().

Problemi correlati