Python: ¿Cuál es el manejo predeterminado de SIGTERM?
signals (2)
Nada. Python en sí no registra un controlador de señal para ello. Puedes consultar esto en el intérprete interactivo:
>>> import signal
>>> signal.signal(signal.SIGTERM, signal.SIG_DFL)
0
>>> signal.SIG_DFL
0
Eso muestra signal.signal()
regresando signal.SIG_DFL para signal.SIGTERM
. signal.SIGINT
con signal.SIGINT
, que tiene un manejador de señal predeterminado (que genera KeyboardInterrupt
):
>>> signal.signal(signal.SIGINT, signal.SIG_DFL)
<built-in function default_int_handler>
¿Qué hace Python bajo las coberturas por defecto si recibe un SIGTERM pero no hay un controlador de señales registrado para él?
Sobre la base de la respuesta de Thomas Wouters, python no registra un controlador para la señal SIGTERM. Podemos ver esto haciendo:
In[23]: signal.SIG_DFL == signal.signal(signal.SIGTERM,signal.SIG_DFL)
Out[23]: True
Eso significa que el sistema tomará la acción por defecto. En linux, la acción predeterminada (según la página de comando man ) para un SIGTERM es terminar el proceso.
Terminar un proceso significa que:
el proceso simplemente no se asignará más intervalos de tiempo durante los cuales puede ejecutar código.
- Esto significa que no generará una excepción ni llamará al código en try: finally: blocks o el método de salida de los administradores de contexto. No hará esas cosas porque ese intérprete de Python en particular nunca tendrá la oportunidad de ejecutar otra instrucción.
La memoria del proceso y otros recursos (archivos abiertos, sockets de red, etc.) se devolverán al resto del sistema.