2012-01-29 82 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