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

我需要在低优先级的情况下启动一个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 )来运行提供的命令。 试试看 …