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

时间:2011-06-03 06:34:08

标签: java windows processbuilder windows-scheduler

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

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

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

是否有人知道如何从Java启动流程(如果需要,可以使用Windows),优先级为belownormal

1 个答案:

答案 0 :(得分:16)

使用start command。它依赖于Windows,但可以满足您的需求。我have read没有跨平台的方式。

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");