El siguiente programa es muy simple: genera un solo punto cada medio segundo. Si recibe un SIGQUIT, procede a la salida 0 Q s. Si recieves un SIGTSTP(Ctrl - Z), se da salida a diez Z s.Problemas con la señal de Python: el controlador SIGQUIT ¿retrasa la ejecución si se recibe SIGQUIT durante la ejecución de otro manejador de señal?
Si recieves un SIGTSTP durante la impresión Q s, se imprimirá diez Z s después de que se ha hecho con los diez Q s. Ésto es una cosa buena.
Sin embargo, si un recieves SIGQUIT durante la impresión Z s, que no se imprime Q s después de ellos. En cambio, los imprime solo después de que finalizo la ejecución manualmente a través de KeyboardInterrupt. Quiero que se imprima el Q s inmediatamente después del Z s.
Esto ocurre con Python2.3.
¿Qué estoy haciendo mal? Muchas gracias.
#!/usr/bin/python
from signal import *
from time import sleep
from sys import stdout
def write(text):
stdout.write(text)
stdout.flush()
def process_quit(signum, frame):
for i in range(10):
write("Q")
sleep(0.5)
def process_tstp(signum, frame):
for i in range(10):
write("Z")
sleep(0.5)
signal(SIGQUIT, process_quit)
signal(SIGTSTP, process_tstp)
while 1:
write('.')
sleep(0.5)