我需要在低优先级下启动一个 CPU 密集型系统进程,这样它就不会减慢我的服务器速度。我怎样才能在 Linux 上做到这一点?
这与这个问题类似:使用 Runtime.exec / ProcessBuilder.start 以低优先级启动 Java 进程? https://stackoverflow.com/questions/6223765/start-a-java-process-using-runtime-exec-processbuilder-start-with-low-priori除了在 Linux 上而不是在 Windows 上。如果在进程启动后更改进程的优先级也没关系(只要没有太多延迟)。
使用运行命令/usr/bin/nice http://amath.colorado.edu/computing/software/man/nice.html。例如:
$ /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()
等等,因为(据我所知)/usr/bin/nice
命令用途exec
(not fork
/ exec
) 运行提供的命令。试试看 ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)