private WorkerJvm startWorkerJvm() throws IOException { int workerIndex = workerJvmSettings.getWorkerIndex(); WorkerType type = workerJvmSettings.getWorkerType(); SimulatorAddress workerAddress = new SimulatorAddress(AddressLevel.WORKER, agent.getAddressIndex(), workerIndex, 0); String workerId = "worker-" + agent.getPublicAddress() + '-' + workerIndex + '-' + type.toLowerCase(); File workerHome = new File(testSuiteDir, workerId); ensureExistingDirectory(workerHome); WorkerJvm workerJvm = new WorkerJvm(workerAddress, workerId, workerHome); generateWorkerStartScript(type, workerJvm); ProcessBuilder processBuilder = new ProcessBuilder(new String[] {"bash", "worker.sh"}) .directory(workerHome) .redirectErrorStream(true); Map<String, String> environment = processBuilder.environment(); String javaHome = getJavaHome(); String path = javaHome + File.pathSeparator + "bin:" + environment.get("PATH"); environment.put("PATH", path); environment.put("JAVA_HOME", javaHome); Process process = processBuilder.start(); workerJvm.setProcess(process); copyResourcesToWorkerId(workerId); workerJvmManager.add(workerAddress, workerJvm); return workerJvm; }