public Pair<Integer, String> exec(String[] command) throws IOException {
        ProcessBuilder pb = new ProcessBuilder(command);        
        StringBuilder ret = new StringBuilder();
        pb.environment().remove("VESPA_LOG_TARGET");
        if (override_log_control) {
            pb.environment().remove("VESPA_LOG_CONTROL_FILE");
            pb.environment().put("VESPA_SERVICE_NAME", "exec-" + command[0]);
        }
        pb.redirectErrorStream(true);
        Process p = pb.start();
        InputStream is = p.getInputStream();
        while (true) {
            int b = is.read();
            if (b == -1) break;
            ret.append((char)b);
        }
        int rc = 0;
        try {
            rc = p.waitFor();
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        return new Pair<>(rc, ret.toString());
    }
Executes the given command synchronously without timeout.

@param command tokens
@return Retcode and stdout/stderr merged
vespajlib/src/main/java/com/yahoo/system/ProcessExecuter.java