Run the command using /usr/bin/nice
. For instance:
$ /usr/bin/nice -n 10 somecommand arg1 arg2
will run somecommand arg1 arg2
at a niceness of +10. (In Unix / Linux, a larger niceness value results in a lower scheduler priority. The range of nice
is typically from -19 to +19.)
Note that this solution is platform specific. It will only work on Linux and Unix systems ...
FOLLOW UP
The ProcessBuilder should be instantiated as you would any normal command; i.e.
new ProcessBuilder("nice", "-n", "10", "somecommand", "arg1", "arg2");
There's no black magic about when / how to split commands / arguments. The command (e.g. nice
) syntax determines what it arguments should be, and that determines both how they should quoted on the shell command line, and how they should be provided when using ProcessBuilder
(or the native exec*
syscalls of that matter).
I don't think that there should be problems with waitFor()
etc, because (AFAIK) the /usr/bin/nice
command uses exec
(not fork
/ exec
) to run the supplied command. Try it out ...