code: @Override
      protected ProcessOutput executeProcessImpl(ConfigurationHolder configurationHolder,String command) throws IOException,InterruptedException
      {
          //parse command
          List<String> commandList=this.parseCommand(configurationHolder,command);
          
          //invoke process
          ProcessBuilder processBuilder=new ProcessBuilder(commandList);
          Process process=processBuilder.start();
          
          //read output
          InputStream inputStream=process.getInputStream();
          OutputReadThread outputThread=new OutputReadThread(inputStream);
          outputThread.start();
          inputStream=process.getErrorStream();
          OutputReadThread errorThread=new OutputReadThread(inputStream);
          errorThread.start();
          
          //wait for process to end
          int exitCode=process.waitFor();
          
          //get output
          String outputText=outputThread.getText();
          String errorText=errorThread.getText();
          
          //create output
          ProcessOutput processOutput=new ProcessOutput(outputText,errorText,exitCode);
  
          return processOutput;
      }
docs: This function executes the given command and returns the process output.
  
  @param   configurationHolder
  The configuration holder used when invoking the process
  @param   command
  The command to execute
  @return  The process output
  @throws  IOException
  Any IO exception
  @throws  InterruptedException
  If thread interrupted during waitFor for the process