我需要以低优先级启动 CPU 密集型系统进程,以免降低我的服务器速度。我怎样才能在 Linux 上做到这一点?
这类似于这个问题:Start a Java process at low priority using Runtime.exec / ProcessBuilder.start? 除了在 Linux 而不是 Windows 上。如果在进程启动后改变进程的优先级是可以的(只要没有太多延迟)。
我需要以低优先级启动 CPU 密集型系统进程,以免降低我的服务器速度。我怎样才能在 Linux 上做到这一点?
这类似于这个问题:Start a Java process at low priority using Runtime.exec / ProcessBuilder.start? 除了在 Linux 而不是 Windows 上。如果在进程启动后改变进程的优先级是可以的(只要没有太多延迟)。
使用 运行命令/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
)来运行提供的命令。试试看 ...