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

And*_*rew 13 java windows windows-task-scheduler processbuilder

我正在尝试使用ProcessBuilder类通过Java启动外部进程,这很有用.目前正在使用命令运行:

new ProcessBuilder("java", "-jar", jarfile, args);
Run Code Online (Sandbox Code Playgroud)

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

有没有人知道如何从Java启动进程(特定于Windows,如果需要),具有belownormal优先级?

teo*_*jan 16

使用start命令.它依赖于Windows,但可以满足您的需求.我已经读过没有跨平台的方式.

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

甚至可以读取输入结束错误流.

等待:

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");
Run Code Online (Sandbox Code Playgroud)

对于过早毁灭:

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");
Run Code Online (Sandbox Code Playgroud)