RunClassInSeparateJvmMachine { StartedProcess startProcess() throws IOException { ProcessExecutor processExecutor = buildProcessExecutor(); return processExecutor.start(); } RunClassInSeparateJvmMachine(
            String name,
            String classNameWithMainToRun,
            List<String> classpath, 
            List<String> jvmArguments,
            File mavenBaseDir);  RunClassInSeparateJvmMachine(
            String name,
            String classNameWithMainToRun,
            String classpath, 
            List<String> jvmArguments,
            File mavenBaseDir); OutputStream getOutput(); void setOutput(OutputStream output); StartedProcess getActiveProcess(); void setActiveProcess(StartedProcess activeProcess); synchronized void restart();  }
@Test public void startProcess() throws Exception { RunClassInSeparateJvmMachine rcsjm = new RunClassInSeparateJvmMachine ( "FakeDaemon", FakeDaemonMain.class.getName(), getOurClassPath(), Collections.EMPTY_LIST, new File(".") ); final ByteArrayOutputStream baos = new ByteArrayOutputStream(); rcsjm.setOutput(baos); StartedProcess startedProcess = rcsjm.startProcess(); assertTrue(isAlive(startedProcess.getProcess())); waitOrTimeout(fakeDaemonCondition(baos), Timeout.timeout(Duration.millis(10000))); startedProcess.getProcess().destroy(); ProcessResult processResult = startedProcess.getFuture().get(); }