我正在尝试使用 Java 启动一个进程,或者使用 ProcessBuilder 或 apache DefaultExecutor 作为另一个用户,并且能够读取该进程的标准输出:我拥有的示例代码:
OutputStream out = null;
OutputStream err = null;
InputStream in = null;
String line = "runas /noprofile /user:dev /savecred /env \"java -cp myProj.jar com.myComp.myProj.Main -libjardirs target/lib\"";
CommandLine cmdLine = CommandLine.parse(line);
DefaultExecutor executor = new DefaultExecutor();
executor.setExitValue(0);
PumpStreamHandler streamHandler = new PumpStreamHandler(out, err, in);
executor.setStreamHandler(streamHandler);
streamHandler.start();
ExecuteWatchdog watchdog = new ExecuteWatchdog(60000);
executor.setWatchdog(watchdog);
int exitValue = executor.execute(cmdLine);
我尝试了不同的变化,但到目前为止没有运气。Runas 启动另一个执行的进程,但 stdout 仅从 runas 本身获取信息,该信息不返回任何内容以及在该进程完成之前返回的主要内容。我不想在该 jar 执行完成之前继续执行我的程序,并且我还希望能够在该 jar 执行时(或至少在它完成执行时)获取该 jar 的标准输出。如果它达到timelimt,还需要能够终止该jar的执行