@Override
  protected void process(ClusterDistributionManager dm) {
    boolean isToShutdown = hasCache(dm);
    super.process(dm);

    if (isToShutdown) {
      // Do the disconnect in an async thread. The thread we are running
      // in is one in the dm threadPool so we do not want to call disconnect
      // from this thread because it prevents dm from cleaning up all its threads
      // and causes a 20 second delay.
      final InternalDistributedSystem ids = dm.getSystem();
      if (ids.isConnected()) {
        Thread t = new LoggingThread("ShutdownAllRequestDisconnectThread", false, () -> {
          try {
            Thread.sleep(SLEEP_TIME_BEFORE_DISCONNECT_DS);
          } catch (InterruptedException ignore) {
          }
          ConnectionTable.threadWantsSharedResources();
          if (ids.isConnected()) {
            ids.disconnect();
          }
        });
        t.start();
      }
    }
  }
Sends a shutdownAll request to all other members and performs local shutdownAll processing in
the waitingThreadPool.
geode-core/src/main/java/org/apache/geode/internal/admin/remote/ShutdownAllRequest.java