下面的程序非常简单:它每半秒输出一个点。如果它收到一个SIGQUIT,它会继续输出 10 个Q s。如果它收到一个SIGTSTP ( Ctrl- Z),它会输出 10 个Z。
如果它在打印Q s 时收到SIGTSTP ,它将在完成 10 个Q s 后打印 10 个Z s。这是一件好事。
但是,如果它在打印Z s 时收到SIGQUIT,则无法在它们之后打印Q s。相反,它仅在我通过 KeyboardInterrupt 手动终止执行后才将它们打印出来。我希望Q s 在Z s之后立即打印。
这发生在 Python2.3 中。
我究竟做错了什么?
#!/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)