我需要在低优先级的情况下启动一个CPU密集型的系统进程,这样它不会减慢我的服务器。 我怎么能在Linux上做到这一点?
这与此问题类似: 使用Runtime.exe / ProcessBuilder.start以低优先级启动Java进程? 除了Linux而不是Windows。 如果进程启动后进程的优先级改变(只要没有太多的延迟),那也没关系。
使用/usr/bin/nice
运行该命令。 例如:
$ /usr/bin/nice -n 10 somecommand arg1 arg2
将运行一些somecommand arg1 arg2
在+10的somecommand arg1 arg2
。 (在Unix / Linux中,较高的nice
值会导致调度程序的优先级降低, nice
的范围通常为-19到+19)。
请注意,此解决方案是平台特定的。 它只能在Linux和Unix系统上工作…
跟进
ProcessBuilder应该像任何常规命令一样被实例化; 即
new ProcessBuilder("nice", "-n", "10", "somecommand", "arg1", "arg2");
关于什么时候/如何分割命令/参数没有黑魔法。 命令(例如nice
)语法决定了它的参数应该是什么,并决定了它们应该如何在shell命令行上引用,以及如何在使用ProcessBuilder
(或者本机exec*
syscalls)时提供它们。
我不认为应该有waitFor()
等问题,因为(AFAIK) /usr/bin/nice
命令使用exec
(而不是fork
/ exec
)来运行提供的命令。 试试看 …