別のユーザーとして ProcessBuilder または apache DefaultExecutor を使用して Java を使用してプロセスを開始し、そのプロセスの stdout を読み取ることができるようにしようとしています: 私が持っているサンプル コード:
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のstdoutを取得できるようにしたいです。また、timelimt に達した場合、その jar の実行を終了できる必要があります