Por alguna razón, siginterrupt() solo parece establecer el comportamiento de la primera señal recibida.siginterrupt() solo funciona para la primera señal? (Python)
En este programa de ejemplo, el primer SIGQUIT parece no hacer nada, pero el segundo sigquit imprime "SIGQUIT Handler" y s.accept() arroja una excepción de llamada al sistema interrumpido.
from signal import *
from socket import *
import sys
def sigquitHandler(signum, frame):
print("SIGQUIT Handler")
s = socket()
s.bind(("0.0.0.0", int(sys.argv[1])))
s.listen(5)
signal(SIGQUIT, sigquitHandler)
siginterrupt(SIGQUIT, False)
client, addr = s.accept() # Or any syscall that blocks
client.close()
s.close()
¿Qué estoy mal entendiendo aquí?
Editar: Aquí hay algo más que no puedo entender, en este programa, un SIGQUIT interrumpe la selección(). ¿Se supone que eso suceda?
from signal import *
import select
import sys
def sigquitHandler(signum, frame):
print("SIGQUIT Handler")
signal(SIGQUIT, sigquitHandler)
siginterrupt(SIGQUIT, False)
select.select([sys.stdin], [], [])
creo que 'siginterrupt' realmente sólo se aplica a las llamadas al sistema que impliquen la transferencia de datos (primitivas como abrir, leer o escribir). No creo que se aplique a llamadas al sistema como 'seleccionar'. – mhawke
Ah, está bien. Gracias de nuevo :) –