2012-01-29 36 views
4

我需要开始低优先级下一个CPU密集型的系统进程,这样它不会在我的服务器慢下来。我如何在Linux上执行此操作?启动一个进程(使用的Runtime.exec/ProcessBuilder.start)与低优先级

这类似于这样的问题:Start a Java process at low priority using Runtime.exec/ProcessBuilder.start?除了在Linux而不是Windows。如果进程开始后进程的优先级发生改变(只要没有太多延迟),那就没问题了。

回答

8

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

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

将在+10一个正派运行somecommand arg1 arg2。 (在Unix/Linux中,较大的漂亮值导致调度优先级较低,nice的范围通常为-19至+19)。

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


跟进

的的ProcessBuilder应该被实例化,就像任何普通的命令;即

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

关于何时/如何分割命令/参数没有什么黑魔法。该命令(例如nice)语法确定它的参数应该是什么,并确定它们应该如何在shell命令行上引用,以及在使用ProcessBuilder(或该事件的本机exec*系统调用)时应该如何提供它们。

我不认为应该有问题waitFor()等,因为(据我所知)的/usr/bin/nice命令使用exec(不fork/exec)运行提供的命令。试试吧......

+0

我应该如何将它传递给ProcessBuilder?新的ProcessBuilder(“nice”,“-n”,“10”,“somecommand”,“arg1”,“arg2”)或新的ProcessBuilder(“nice”,“-n”,“10”,“somecommand arg1 arg2” )? Windows解决方案展示的waitfor()和destroy()会不会有问题? – 2012-01-29 19:12:25