code: func Run(ctx context.Context, cfg Config, newTeleport NewProcess) error {
  	if newTeleport == nil {
  		newTeleport = newTeleportProcess
  	}
  	copyCfg := cfg
  	srv, err := newTeleport(&copyCfg)
  	if err != nil {
  		return trace.Wrap(err, "initialization failed")
  	}
  	if srv == nil {
  		return trace.BadParameter("process has returned nil server")
  	}
  	if err := srv.Start(); err != nil {
  		return trace.Wrap(err, "startup failed")
  	}
  	// Wait and reload until called exit.
  	for {
  		srv, err = waitAndReload(ctx, cfg, srv, newTeleport)
  		if err != nil {
  			// This error means that was a clean shutdown
  			// and no reload is necessary.
  			if err == ErrTeleportExited {
  				return nil
  			}
  			return trace.Wrap(err)
  		}
  	}
  }
docs: // Run starts teleport processes, waits for signals
  // and handles internal process reloads.