निम्न प्रोग्राम बहुत आसान है: यह प्रत्येक आधे सेकेंड में एक सिंगल डॉट आउटपुट करता है। यदि यह SIGQUIT प्राप्त करता है, तो यह 10 क्यू एस आउटपुट तक पहुंच जाता है। यह प्राप्त करता है, तो एक SIGTSTP(Ctrl - जेड), यह दस जेड रों आउटपुट।पायथन सिग्नल की समस्याएं: सिग्क्विट हैंडलर निष्पादन में देरी करता है अगर सिग्क्विट किसी अन्य सिग्नल हैंडलर के निष्पादन के दौरान प्राप्त होता है?
यदि यह प्राप्त करता है एक SIGTSTP जबकि मुद्रण क्यू रों, यह दस जेड प्रिंट होगा रों के बाद यह दस क्यू के साथ किया है। यह एक अच्छी बात है।
हालांकि, अगर यह एक SIGQUIT प्राप्त करता प्रिंट करते समय जेड रों, यह उन्हें बाद क्यू मुद्रित करने के लिए रों विफल रहता है। इसके बजाए, जब मैं मैन्युअल रूप से कीबोर्ड इंटरप्ट के माध्यम से निष्पादन को समाप्त कर देता हूं तो यह उन्हें प्रिंट करता है। मैं क्यू एस जेड एस के तुरंत बाद मुद्रित करना चाहता हूं।
यह Python2.3 का उपयोग होता है।
मैं क्या गलत कर रहा हूं? मुचस 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)