2009-04-17 15 views

risposta

1

Si potrebbe ottenere la lettura dell'ID del processo principale molto presto nel processo e quindi il controllo, ma ovviamente è soggetto alle condizioni di gara. Il genitore che ha generato lo spawn potrebbe essere morto immediatamente, e anche prima che il processo potesse eseguire la sua prima istruzione.

A meno che non si abbia un modo di verificare se un dato PID si riferisce al genitore "atteso", penso che sia difficile farlo in modo affidabile.

3

Se il processo Python è in esecuzione su Linux e la chiamata di sistema prctl() è esposta, è possibile utilizzare la risposta here.

Questo può causare l'invio di un segnale al bambino quando il processo genitore muore.

1

L'unico modo affidabile che conosco è creare una pipa appositamente per questo scopo. Il bambino dovrà tentare ripetutamente di leggere dalla pipe, preferibilmente in modalità non bloccante, o usando select. Otterrà un errore quando il tubo non esiste più (presumibilmente a causa della morte del genitore).

1

Supponendo che il genitore è vivo quando si inizia a fare questo, è possibile controllare se è ancora in vita in un ciclo occupato in quanto tale, utilizzando psutil:

import psutil, os, time 
me = psutil.Process(os.getpid()) 
while 1: 
    if me.parent is not None: 
     # still alive 
     time.sleep(0.1) 
     continue 
    else: 
     print "my parent is gone" 

Non è molto bello, ma ...

Problemi correlati