Java 以低优先级启动进程(使用Runtime.exec/ProcessBuilder.Start)

Java 以低优先级启动进程(使用Runtime.exec/ProcessBuilder.Start),java,linux,scheduling,processbuilder,Java,Linux,Scheduling,Processbuilder,我需要在低优先级下启动CPU密集型系统进程,这样就不会降低服务器的速度。我如何在Linux上做到这一点 这类似于这个问题:除了在Linux而不是Windows上。如果进程启动后更改了进程的优先级(只要没有太多延迟),则可以使用运行命令。例如: $ /usr/bin/nice -n 10 somecommand arg1 arg2 将以+10的准确度运行somecommand arg1 arg2。(在Unix/Linux中,较大的niceness值会导致较低的调度程序优先级。nice的范围通常为

我需要在低优先级下启动CPU密集型系统进程,这样就不会降低服务器的速度。我如何在Linux上做到这一点

这类似于这个问题:除了在Linux而不是Windows上。如果进程启动后更改了进程的优先级(只要没有太多延迟),则可以使用运行命令。例如:

$ /usr/bin/nice -n 10 somecommand arg1 arg2
将以+10的准确度运行
somecommand arg1 arg2
。(在Unix/Linux中,较大的niceness值会导致较低的调度程序优先级。
nice
的范围通常为-19到+19。)

请注意,此解决方案是特定于平台的。它只能在Linux和Unix系统上工作


跟进

ProcessBuilder应该像任何普通命令一样实例化;i、 e

    new ProcessBuilder("nice", "-n", "10", "somecommand", "arg1", "arg2");
关于何时/如何分割命令/参数,没有什么黑魔法。命令(例如,
nice
)语法决定了它的参数应该是什么,也决定了它们应该如何在shell命令行中引用,以及在使用
ProcessBuilder
时应该如何提供它们(或本机的
exec*
系统调用)


我认为
waitFor()
等不应该有问题,因为(AFAIK)
/usr/bin/nice
命令使用
exec
(而不是
fork
/
exec
)来运行提供的命令。尝试一下…

我应该如何将其传递给ProcessBuilder?新的ProcessBuilder(“nice”、“-n”、“10”、“somecommand”、“arg1”、“arg2”)或新的ProcessBuilder(“nice”、“-n”、“10”、“somecommand arg1 arg2”)?Windows解决方案所展示的waitfor()和destroy()是否没有任何问题?