@Override
  protected int executeCommand() throws CommandException, CommandValidationException {
    // if the local password isn't available, the instance isn't running
    // (localPassword is set by initInstance)
    File serverDir = getServerDirs().getServerDir();

    if (serverDir == null || !serverDir.isDirectory()) return noSuchInstance();

    if (getServerDirs().getLocalPassword() == null) return instanceNotRunning();

    String serverName = getServerDirs().getServerName();
    HostAndPort addr = getAdminAddress(serverName);
    programOpts.setHostAndPort(addr);

    logger.finer("StopInstance.stoppingMessage" + addr.getPort());

    if (!isRunning()) return instanceNotRunning();

    logger.finer("It's the correct Instance");
    return doRemoteCommand();
  }
  private int kill() throws CommandException {
    File prevPid = null;
    String pids = null;

    try {
      prevPid = new File(getServerDirs().getPidFile().getPath() + ".prev");

      if (!prevPid.canRead())
        throw new CommandException(Strings.get("StopInstance.nopidprev", prevPid));

      pids = FileUtils.readSmallFile(prevPid).trim();
      String s = ProcessUtils.kill(Integer.parseInt(pids));

      if (s != null) logger.finer(s);
    } catch (CommandException ce) {
      throw ce;
    } catch (Exception ex) {
      throw new CommandException(
          Strings.get("StopInstance.pidprevreaderror", prevPid, ex.getMessage()));
    }
    return 0;
  }