title: Daemonizing python's BaseHTTPServer
body: <p>I am working on a daemon where I need to embed a HTTP server.  I am attempting to do it with  BaseHTTPServer, which when I run it in the foreground, it works fine, but when I try and fork the daemon into the background, it stops working.  My main application continues to work, but BaseHTTPServer does not.</p>
  
  <p>I believe this has something to do with the fact that BaseHTTPServer sends log data to STDOUT and STDERR.  I am redirecting those to files.  Here is the code snippet:</p>
  
  <pre><code># Start the HTTP Server
  server = HTTPServer((config['HTTPServer']['listen'],config['HTTPServer']['port']),HTTPHandler)
  
  # Fork our process to detach if not told to stay in foreground
  if options.foreground is False:
      try:
          pid = os.fork()
          if pid &gt; 0:
              logging.info('Parent process ending.')
              sys.exit(0)            
      except OSError, e:
          sys.stderr.write("Could not fork: %d (%s)\n" % (e.errno, e.strerror))
          sys.exit(1)
  
      # Second fork to put into daemon mode
      try: 
          pid = os.fork() 
          if pid &gt; 0:
              # exit from second parent, print eventual PID before
              print 'Daemon has started - PID # %d.' % pid
              logging.info('Child forked as PID # %d' % pid)
              sys.exit(0) 
      except OSError, e: 
          sys.stderr.write("Could not fork: %d (%s)\n" % (e.errno, e.strerror))
          sys.exit(1)
  
  
      logging.debug('After child fork')
  
      # Detach from parent environment
      os.chdir('/') 
      os.setsid()
      os.umask(0) 
  
      # Close stdin       
      sys.stdin.close()
  
      # Redirect stdout, stderr
      sys.stdout = open('http_access.log', 'w')
      sys.stderr = open('http_errors.log', 'w')    
  
  # Main Thread Object for Stats
  threads = []
  
  logging.debug('Kicking off threads')
  
  while ...
    lots of code here
  ...
  
  server.serve_forever()
  </code></pre>
  
  <p>Am I doing something wrong here or is BaseHTTPServer somehow prevented from becoming daemonized? </p>
  
  <p>Edit: Updated code to demonstrate the additional, previously missing code flow and that log.debug shows in my forked, background daemon I am hitting code after fork.</p>