¿Hay alguna manera de que un proceso secundario en Python detecte si el proceso principal ha muerto?Proceso secundario que detecta la muerte del proceso primario en Python
Respuesta
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.
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.
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).
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 ...
- 1. ptrace'ing del proceso primario
- 2. NodeJS: proceso del nodo secundario?
- 3. Cómo termina el proceso secundario cuando finaliza el proceso primario en C#
- 4. Salir del proceso secundario después de os.fork()
- 5. ¿Cómo devuelve fork() para el proceso secundario
- 6. GDB backtrace en el proceso secundario
- 7. Supervisar el uso de la memoria del proceso secundario
- 8. Cómo sincronizar la ejecución del proceso principal/secundario?
- 9. ¿Cómo matar un proceso secundario por el proceso principal?
- 10. Detectar cuando el proceso primario finaliza
- 11. Secuencia de salida del proceso secundario en Ruby
- 12. Comprobación del estado de un proceso secundario en C++
- 13. Adjunte el proceso secundario al depurador
- 14. Por qué la dirección de la variable de proceso hijo y el proceso primario es igual
- 15. Señalización a un proceso primario de que un proceso hijo está completamente inicializado
- 16. Tamaño del proceso en XP desde Python
- 17. Problema al enviar la señal al proceso secundario en C
- 18. Cómo indicar la identificación del proceso dentro de Python
- 19. Obtener stacktrace del proceso de python atascado
- 20. ¿Python está mirando el inicio del proceso?
- 21. Cómo escribir datos en el proceso STDIN del proceso externo?
- 22. Comunicación de proceso en Python
- 23. ¿Cómo se genera un proceso secundario en Ruby?
- 24. Cambiar la prioridad del proceso en Python, multiplataforma
- 25. ¿Cómo obtener el ID del proceso del nombre del proceso?
- 26. C# redirigir (canalizar) la salida del proceso a otro proceso
- 27. Animación WPF: ¿Detecta si alguna animación está en proceso?
- 28. Python: Separación del proceso de GUI del proceso de lógica central
- 29. Determinación del índice secundario en su elemento primario
- 30. Señal de captura en el proceso de fondo secundario