2009-04-17 20 views

Respuesta

1

Puede obtener la lectura de la identificación de su proceso padre muy temprano en su proceso, y luego verificar, pero por supuesto que es propenso a las condiciones de carrera. El padre que hizo el spawn pudo haber muerto inmediatamente, e incluso antes de que tu proceso llegara a ejecutar su primera instrucción.

A menos que tenga una forma de verificar si un PID determinado se refiere al padre "esperado", creo que es difícil hacerlo de manera confiable.

3

Si su proceso Python se ejecuta bajo Linux, y la llamada al sistema prctl() está expuesta, puede usar la respuesta here.

Esto puede provocar que se envíe una señal al niño cuando el proceso principal fallece.

1

La única manera confiable que conozco es crear una tubería específicamente para este propósito. El niño tendrá que intentar repetidamente leer desde la tubería, preferiblemente de forma no bloqueante, o usando seleccionar. Recibirá un error cuando la tubería ya no exista (presumiblemente debido a la muerte de los padres).

1

Suponiendo que el padre está vivo cuando se empieza a hacer esto, puede comprobar si aún está vivo en un bucle ocupado como tal, mediante el uso de 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" 

No es muy agradable, pero ...

Cuestiones relacionadas