使用 Runtime.exec / ProcessBuilder.start 以低优先级启动 Java 进程?

我正在尝试使用 ProcessBuilder 类通过 Java 启动一个外部进程,这很有帮助。当前正在使用以下命令运行:

new ProcessBuilder("java", "-jar", jarfile, args);

我想做的就是这个,但要以低优先级开始这个过程。我的程序目前只在Windows上运行,所以一个特定于窗口的解决方案对我来说很好。一些研究表明我使用“start”命令,但是当我尝试从Java执行此操作时,它会给出一个异常,说它是一个无法识别的命令(相同的命令适用于cmd.exe)。

有没有人知道如何从Java启动一个进程(如果需要的话,是特定于Windows的),有优先权?belownormal


答案 1

使用启动命令。它依赖于窗口,但可以满足您的需求。我已经读过没有跨平台的方式。

ProcessBuilder pb = new ProcessBuilder("cmd", "/C start /B /belownormal javaws -version");
System.out.println("Before start");
Process start = pb.start();

甚至可以读取输入端错误流。

要等待:

ProcessBuilder pb = new ProcessBuilder("cmd", "/C start /B /belownormal /WAIT javaws -sdasd");
System.out.println("Before start");
Process start = pb.start();
start.waitFor();
System.out.println("Done");

对于过早销毁:

ProcessBuilder pb = new ProcessBuilder("cmd", "/C start /B /belownormal /WAIT javaws -sdasd");
System.out.println("Before start");
Process start = pb.start();
start.destroy();
start.waitFor();

System.out.println("Done");

答案 2

推荐