docs: public static int execute(String[] commandArray, String[] alternativeEnvVars, File workingDir, Receiver outputReceiver) throws IOException {
  		Runtime rt = Runtime.getRuntime();
  		//command + arguments, environment parameters, workingdir
          Process proc = null;
          try {
  		    proc = rt.exec(commandArray, alternativeEnvVars, workingDir);
          } catch (Exception e) {
              System.out.println("unable to execute command: " + ArraySupport.format(commandArray, ", "));
              e.printStackTrace();
              throw new RuntimeException("unable to execute command: " + ArraySupport.format(commandArray, ", "), e);
          }
  
  		// any error message?
  		Transponder errorForwarder = new
  				Transponder(proc.getErrorStream(), new Pipe(outputReceiver));
  
  		// any output?
  		Transponder outputForwarder = new
  				Transponder(proc.getInputStream(), new Pipe(outputReceiver));
  
  		errorForwarder.start();
  		outputForwarder.start();
  
  		try {
  			int retval = proc.waitFor();//threads will stop when proc is done and InputStream and ErrorStream close
  			errorForwarder.stop();
  			outputForwarder.stop();
  			return retval;
  		}
  		catch (InterruptedException ie) {
  			//...
  		}
  		return -1;
  	}