<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">Hi All, <div><br></div><div>I have the following code which when executed waits to be interrupted by SIGINT, SIGTERM or SIGQUIT. When an object is initialized, it creates a threading.Condition() and acquires() it! The program then registers the signal handlers where notify() and release() is called when the above mentioned signals are received. After registering the signal handlers, it calls wait() on the condition variable and block.</div><div><br></div><div>When I tried to stop the program with Ctrl-C, its did not respond. IOW, the _signal_handler() method did not get called.  </div><div><div><br></div><div><font face="Courier" size="1"># start</font></div><div><font face="Courier" size="1"><br></font></div><div><font face="Courier" size="1">from signal import signal, SIGINT, SIGTERM, SIGQUIT</font></div><div><font face="Courier" size="1">from threading import Condition</font></div><div><font face="Courier" size="1"><br></font></div><div><font face="Courier" size="1">class A:</font></div><div><font face="Courier" size="1">    def __init__(self):</font></div><div><font face="Courier" size="1">        self._termination_signal = Condition()</font></div><div><font face="Courier" size="1">        self._termination_signal.acquire(blocking=0)</font></div><div><font face="Courier" size="1"><br></font></div><div><font face="Courier" size="1">    def _signal_handler(self, signum, frame):</font></div><div><font face="Courier" size="1">        print "Received terminate request - signal = {0}".format(signum)</font></div><div><font face="Courier" size="1">        del frame</font></div><div><font face="Courier" size="1">        self._termination_signal.notify()</font></div><div><font face="Courier" size="1">        self._termination_signal.release()</font></div><div><font face="Courier" size="1">        return</font></div><div><font face="Courier" size="1"><br></font></div><div><font face="Courier" size="1">    def register_and_wait(self):</font></div><div><font face="Courier" size="1">        signal(SIGINT, self._signal_handler)</font></div><div><font face="Courier" size="1">        signal(SIGTERM, self._signal_handler)</font></div><div><font face="Courier" size="1">        signal(SIGQUIT, self._signal_handler)</font></div><div><font face="Courier" size="1">        print "Waiting to be interrupted!"</font></div><div><font face="Courier" size="1">        self._termination_signal.wait()      # control blocks here!</font></div><div><font face="Courier" size="1">        print "Notified!!"</font></div><div><font face="Courier" size="1"><br></font></div><div><font face="Courier" size="1">def main():</font></div><div><font face="Courier" size="1">    a = A()</font></div><div><font face="Courier" size="1">    a.</font><span style="font-family: Courier; font-size: x-small;">register_and_wait</span><font face="Courier" size="1">()</font></div><div><font face="Courier" size="1"><br></font></div><div><font face="Courier" size="1">if __name__ == "__main__":</font></div><div><font face="Courier" size="1">    main()</font></div></div><div><font face="Courier" size="1"><br></font></div><div><font face="Courier" size="1"># end</font></div><div><br></div><div>What am I doing wrong?! </div><div><br></div><div>Thank you,</div><div><br></div><div>Sangeeth</div></body></html>