code: func (process *TeleportProcess) StartShutdown(ctx context.Context) context.Context {
  	process.BroadcastEvent(Event{Name: TeleportExitEvent, Payload: ctx})
  	localCtx, cancel := context.WithCancel(ctx)
  	go func() {
  		defer cancel()
  		process.Supervisor.Wait()
  		process.Debugf("All supervisor functions are completed.")
  		localAuth := process.getLocalAuth()
  		if localAuth != nil {
  			if err := process.localAuth.Close(); err != nil {
  				process.Warningf("Failed closing auth server: %v.", err)
  			}
  		}
  	}()
  	go process.printShutdownStatus(localCtx)
  	return localCtx
  }
docs: // StartShutdown launches non-blocking graceful shutdown process that signals
  // completion, returns context that will be closed once the shutdown is done