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

时间:2012-01-29 13:40:39

标签: java linux scheduling processbuilder

我需要在低优先级下启动CPU密集型系统进程,这样它不会减慢我的服务器速度。我怎么能在Linux上做到这一点?

这与此问题类似:Start a Java process at low priority using Runtime.exec / ProcessBuilder.start?,除了Linux而不是Windows。如果在进程启动后更改进程的优先级(只要没有太多延迟),则可以。

1 个答案:

答案 0 :(得分:10)

使用/usr/bin/nice运行命令。例如:

$ /usr/bin/nice -n 10 somecommand arg1 arg2

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

请注意,此解决方案是特定于平台的。它只适用于Linux和Unix系统......


关注

ProcessBuilder应该像任何普通命令一样实例化;即。

    new ProcessBuilder("nice", "-n", "10", "somecommand", "arg1", "arg2");

关于何时/如何拆分命令/参数,没有黑魔法。命令(例如nice)语法确定它应该是什么,并确定它们应该如何在shell命令行上引用,以及在使用ProcessBuilder(或native {时)应该如何引用它们。 {1}}系统调用此事)。

我不认为exec*等应该存在问题,因为(AFAIK)waitFor()命令使用/usr/bin/nice(不是exec / {{1} })运行提供的命令。尝试一下......