4

我需要以低优先级启动 CPU 密集型系统进程,以免降低我的服务器速度。我怎样才能在 Linux 上做到这一点?

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

4

1 回答 1

10

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

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

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

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


跟进

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

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

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

我不认为waitFor()etc 应该有问题,因为(AFAIK)/usr/bin/nice命令使用exec(不是fork/ exec)来运行提供的命令。试试看 ...

于 2012-01-29T13:43:50.187 回答