code: void abort(Throwable t) throws IOException {
      LOG.info("Aborting because of " + StringUtils.stringifyException(t));
      try {
        downlink.abort();
        downlink.flush();
      } catch (IOException e) {
        // IGNORE cleanup problems
      }
      try {
        handler.waitForFinish();
      } catch (Throwable ignored) {
        process.destroy();
      }
      IOException wrapper = new IOException("pipe child exception");
      wrapper.initCause(t);
      throw wrapper;      
    }
docs: Abort the application and wait for it to finish.
  @param t the exception that signalled the problem
  @throws IOException A wrapper around the exception that was passed in