Le programme suivant est très simple: il sort un point par demi-seconde. S'il reçoit un SIGQUIT, il procède à la sortie dix Q s. Si elle reçoit un SIGTSTP(Ctrl - Z), il émet dix Z s.Malheurs du signal Python: Le gestionnaire SIGQUIT retarde l'exécution si SIGQUIT est reçu pendant l'exécution d'un autre gestionnaire de signal?
Si elle reçoit un SIGTSTP lors de l'impression Q s, il imprimera dix Z s après cela se fait avec les dix Q s. C'est une bonne chose.
Cependant, si elle reçoit un SIGQUIT lors de l'impression Z s, il ne parvient pas à imprimer Q s après eux. Au lieu de cela, il ne les affiche qu'après avoir terminé manuellement l'exécution via un KeyboardInterrupt. Je veux que le Q s soit imprimé immédiatement après le Z s.
Cela se produit en utilisant Python2.3.
Qu'est-ce que je fais mal? Merci beaucoup.
#!/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)