次のプログラムは非常に単純です。0.5秒ごとに1つのドットを出力します。SIGQUITを受信すると、10個のQを出力します。SIGTSTP (Ctrl- Z)を受信すると、 10個のZを出力します。
Qの印刷中にSIGTSTPを受信した場合、10個のQを実行した後、 10個のZを印刷します。これは良いことです。
ただし、Zの印刷中にSIGQUITを受信すると、その後のQの印刷に失敗します。代わりに、KeyboardInterruptを介して手動で実行を終了した後にのみそれらを出力します。QをZの直後に印刷したい。
これは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)