title: Python 2.7: Child thread not catching KeyboardInterrupt
body: <pre><code>import sys 
  import time
  import threading
  
  class exThread(threading.Thread):
      def __init__(self, threadId):
          threading.Thread.__init__(self)
          self.threadId = threadId
  
      def run(self):
          try:
              while 1:
                  pass
          except KeyboardInterrupt:
              print "Ctrl-C caught by thread"
          finally:
              print "Thread's finally clause being executed" 
              sys.exit() # Same as thread.exit()
  
  cond = True
  def func():
      pass
  
  try:
      th = exThread(1)
      th.start()
      while True:
          if cond:
              func()
  except KeyboardInterrupt:
      print "Ctrl-C caught by main thread"
      sys.exit(0)
  finally:
      print "Executing the finally clause from main thread"
  </code></pre>
  
  <p>On executing above code, when I press Ctrl-C, the main thread exits after printing from its finally clause. Now, since the child thread is a non-daemon, it is still running in the try: except KeyboardInterrupt block. However, this child thread doesn't seem to respond to Ctrl-C, even though it is supposed to catch KeyboardInterrupt exception. Why?</p>