我需要在低优先级下启动CPU密集型系统进程,这样它不会减慢我的服务器速度。我怎么能在Linux上做到这一点?
这与此问题类似:Start a Java process at low priority using Runtime.exec / ProcessBuilder.start?,除了Linux而不是Windows。如果在进程启动后更改进程的优先级(只要没有太多延迟),则可以。
答案 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} })运行提供的命令。尝试一下......