code: func (c *Gcd) startProcess() error {
  	go func() {
  		err := c.chromeCmd.Start()
  		if err != nil {
  			msg := fmt.Sprintf("failed to start chrome: %s", err)
  			if c.terminatedHandler != nil {
  				c.terminatedHandler(msg)
  			} else {
  				log.Println(msg)
  			}
  		}
  		c.chromeProcess = c.chromeCmd.Process
  		err = c.chromeCmd.Wait()
  
  		c.removeProfileDir()
  
  		closeMessage := "exited"
  		if err != nil {
  			closeMessage = err.Error()
  		}
  		if c.terminatedHandler != nil {
  			c.terminatedHandler(closeMessage)
  		}
  	}()
  
  	var err error
  	go func(err error) {
  		err = c.probeDebugPort()
  	}(err)
  	<-c.readyCh
  
  	return err
  }
docs: // startProcess starts the process and waits for the debugger port to be ready