我需要開始低優先級下一個CPU密集型的系統進程,這樣它不會在我的服務器慢下來。我如何在Linux上執行此操作?啓動一個進程(使用的Runtime.exec/ProcessBuilder.start)與低優先級
這類似於這樣的問題:Start a Java process at low priority using Runtime.exec/ProcessBuilder.start?除了在Linux而不是Windows。如果進程開始後進程的優先級發生改變(只要沒有太多延遲),那就沒問題了。
我需要開始低優先級下一個CPU密集型的系統進程,這樣它不會在我的服務器慢下來。我如何在Linux上執行此操作?啓動一個進程(使用的Runtime.exec/ProcessBuilder.start)與低優先級
這類似於這樣的問題: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
將在+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
)運行提供的命令。試試吧......
我應該如何將它傳遞給ProcessBuilder?新的ProcessBuilder(「nice」,「-n」,「10」,「somecommand」,「arg1」,「arg2」)或新的ProcessBuilder(「nice」,「-n」,「10」,「somecommand arg1 arg2」 )? Windows解決方案展示的waitfor()和destroy()會不會有問題? – 2012-01-29 19:12:25