title: Python's multiprocessing.Queue + Process: Properly terminating both programs
body: <p>Given this Python program:</p>
  
  <pre><code># commented out code are alternatives I tried that don't work.
  
  from multiprocessing import Process, Queue
  #from multiprocessing import Process, JoinableQueue as Queue
  
  def start_process(queue):
      # queue.cancel_join_thread()
      while True:
          print queue.get()
  
  if __name__ == '__main__':
      queue = Queue()
      # queue.cancel_join_thread()
  
      process = Process(target=start_process, args=(queue,))
      process.start()
  
      queue.put(12)
      process.join()
  </code></pre>
  
  <p>When I kill this program with <code>CTRL-C</code>, this happens:</p>
  
  <pre><code>$&gt; python queuetest.py
  12
  ^CTraceback (most recent call last):
    File "queuetest.py", line 19, in &lt;module&gt;
      process.join()
    File ".../python2.7/multiprocessing/process.py", line 119, in join
      res = self._popen.wait(timeout)
  Process Process-1:
    File ".../python2.7/multiprocessing/forking.py", line 122, in wait
  Traceback (most recent call last):
      return self.poll(0)
    File ".../python2.7/multiprocessing/forking.py", line 107, in poll
      pid, sts = os.waitpid(self.pid, flag)
    File ".../python2.7/multiprocessing/process.py", line 232, in _bootstrap
  KeyboardInterrupt
      self.run()
    File ".../python2.7/multiprocessing/process.py", line 88, in run
      self._target(*self._args, **self._kwargs)
    File "queuetest.py", line 9, in start_process
      print queue.get()
    File ".../python2.7/multiprocessing/queues.py", line 91, in get
      res = self._recv()
  KeyboardInterrupt
  </code></pre>
  
  <p>.. how do I properly terminate the two processess on signal ?</p>
  
  <p>What I want to achieve: In my non-minimal program the second process holds a SocketServer and needs an additional interactive command line interface.</p>