code: func (p *Daemon) Start() error {
  	p.lock.Lock()
  	defer p.lock.Unlock()
  
  	// A stopped proxy cannot be restarted
  	if p.stopped {
  		return fmt.Errorf("stopped")
  	}
  
  	// If we're already running, that is okay
  	if p.process != nil {
  		return nil
  	}
  
  	// Setup our stop channel
  	stopCh := make(chan struct{})
  	exitedCh := make(chan struct{})
  	p.stopCh = stopCh
  	p.exitedCh = exitedCh
  
  	// Start the loop.
  	go p.keepAlive(stopCh, exitedCh)
  
  	return nil
  }
docs: // Start starts the daemon and keeps it running.
  //
  // This function returns after the process is successfully started.