Using "Nice" and "Renice" Commands in Linux

It's all about priorities.

nice and renice commands

Linux systems can run many processes (jobs) simultaneously. Even if the CPU has multiple processors or cores, the number of processes generally far exceeds the number of available cores. It is the job of the Linux kernel to distribute the available CPU cycles to the active processes.

Nice to Get Priorities Straight

By default, all processes are considered equally urgent and are allotted the same amount of CPU time. To enable the user to change the relative importance of processes, Linux associates a priority parameter with each job that can be set or changed by the user. The Linux kernel then reserves CPU time for each process based on its relative priority value.

The nice parameter is used for this purpose. It ranges from minus 20 to plus 19 and can take on only integer values. A value of minus 20 represents the highest priority level, whereas 19 represents the lowest. The fact that the highest priority level is indicated by the most negative number is somewhat unintuitive; however, running at a lower priority is considered "nicer," because it allows other processes to use a bigger share of CPU time.

How to Play Nice

Using the command nice starts a new process (job) and assigns it a priority (nice) value at the same time. To change the priority of a process that is already running, use the command renice.

For example, the following command line starts the process "large-job," setting the nice value to 12:

nice -12 large-job

Note that the dash in front of the 12 does not represent a minus sign. It has the usual function of marking a flag passed as an argument to the nice command.

To set the nice value to minus 12, add another dash:

nice --12 large-job

Remember that lower nice values correspond to higher priority. So, -12 has a higher priority than 12. The default nice value is 0. Regular users can set lower priorities (positive nice values).To use higher priorities (negative nice values), administrator privileges are required.

You can change the priority of a job that is already running using renice:

renice 17 -p 1134

This changes the nice value of the job with process id 1134 to 17. In this case, no dash is used for the command option when specifying the nice value. The following command changes the nice value of process 1134 to -3:

renice -3 -p 1134

To print out a list of current processes, use the ps command. Adding the "l" (as in "list") option lists the nice value under the column heading "NI." For example:

ps -al