public synchronized void stop() throws DatastoreEmulatorException {
    // We intentionally don't check the internal state. If people want to try and stop the server
    // multiple times that's fine.
    stopEmulatorInternal();
    if (state != State.STOPPED) {
      state = State.STOPPED;
      if (projectDirectory != null) {
        try {
          Process process =
              new ProcessBuilder("rm", "-r", projectDirectory.getAbsolutePath()).start();
          if (process.waitFor() != 0) {
            throw new IOException(
                "Temporary project directory deletion exited with " + process.exitValue());
          }
        } catch (IOException e) {
          throw new IllegalStateException("Could not delete temporary project directory", e);
        } catch (InterruptedException e) {
          Thread.currentThread().interrupt();
          throw new IllegalStateException("Could not delete temporary project directory", e);
        }
      }
    }
  }
public synchronized void stop ( ) throws DatastoreEmulatorException { stopEmulatorInternal ( ) ; if ( state != State . STOPPED ) { state = State . STOPPED ; if ( projectDirectory != null ) { try { Process process = new ProcessBuilder ( "rm" , "-r" , projectDirectory . getAbsolutePath ( ) ) . start ( ) ; if ( process . waitFor ( ) != 0 ) { throw new IOException ( "Temporary project directory deletion exited with " + process . exitValue ( ) ) ; } } catch ( IOException e ) { throw new IllegalStateException ( "Could not delete temporary project directory" , e ) ; } catch ( InterruptedException e ) { Thread . currentThread ( ) . interrupt ( ) ; throw new IllegalStateException ( "Could not delete temporary project directory" , e ) ; } } } }
Stops the emulator. Multiple calls are allowed.

@throws DatastoreEmulatorException if the emulator cannot be stopped