C'è un modo per un processo figlio in Python per rilevare se il processo genitore è morto?Rilevamento figlio processo genitore 'morte in Python
risposta
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.
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.
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).
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 ...